也許我需要的是對STDOUT
是什麼的一般解釋,但這是我的問題。我需要在python中的一堆文件對中運行shell腳本,並解析輸出。如果我運行:從Popen捕獲輸出
from itertools import combinations
from subprocess import Popen
for pair in combinations(all_ssu, 2):
Popen(
['blastn',
'-query', 'tmp/{0}.fna'.format(pair[0]),
'-subject', 'tmp/{0}.fna'.format(pair[1]),
'-outfmt', '6 qseqid sseqid pident'
],
)
...這似乎工作大(注:all_ssu
是文件名實質上的列表)。 shell打印出一串我想要比較的數據。那麼,如何將打印的數據打印到列表或數據框中,以便我可以使用它?
環視文檔和這裏其他一些問題之後,它看起來像stdout
標誌是尋找一個文件對象,所以我嘗試:
from itertools import combinations
from subprocess import Popen
for pair in combinations(all_ssu, 2):
out_file = open('tmp.txt', 'rw')
Popen(
['blastn',
'-query', 'tmp/{0}.fna'.format(pair[0]),
'-subject', 'tmp/{0}.fna'.format(pair[1]),
'-outfmt', '6 qseqid sseqid pident'
],
stdout=out_file
)
for line in out_file.readlines():
print line
out_file.close()
,這也似乎工作,但我創建那個我不需要的臨時文件。我試圖設置一個變量captured
到None
,然後把stdout=captured
,但在這種情況下,它只是將captured
設置爲0.我也試過out = Popen(...)
沒有stdout
標誌,但再次,out
只是int(0)
。我也嘗試玩PIPE
,但無法做到正面或反面。
所以問題是:我如何直接從Popen
捕獲輸出?
當您使用'PIPE'時,使用'Popen.communicate'從管道中讀取。 Python在線文檔確實有很好的例子。 –