因此,我正在編寫一個python腳本,在該腳本中我需要調用另一個在標準輸出中打印幾行的python腳本。我想將被調用腳本的輸出存儲在列表中,並在主腳本中處理它們。Python子流程:如何檢索標準輸出
一個簡單的方法是打印結果到一個文件(文件3)和讀取文件,這樣
subprocess.call("./vecdiff.py file1 file2 > file3")
f = open("file3", "r")
我怎樣才能重定向輸出直接進入我的主腳本一些列表?
因此,我正在編寫一個python腳本,在該腳本中我需要調用另一個在標準輸出中打印幾行的python腳本。我想將被調用腳本的輸出存儲在列表中,並在主腳本中處理它們。Python子流程:如何檢索標準輸出
一個簡單的方法是打印結果到一個文件(文件3)和讀取文件,這樣
subprocess.call("./vecdiff.py file1 file2 > file3")
f = open("file3", "r")
我怎樣才能重定向輸出直接進入我的主腳本一些列表?
如下,重定向你的子進程管道的輸出和錯誤,那麼你可以使用「通訊()方法來獲得標準輸出以及您的孩子從PIPE過程中的狀態。 'PIPE'是父進程和子進程之間的管道。
from subprocess import Popen, PIPE
p = Popen("./vecdiff.py file1 file2", stdout=PIPE, stderr=PIPE)
output, errput = p.communicate()
謝謝,但我得到了一個錯誤: OSError:[Errno 2]沒有這樣的文件或目錄:'./vecdiff.py tr674.init.pdb'TR674TS049_1.pdb' –
無法將參數傳遞給字符串eters嵌入,因爲默認shell是禁用的。嘗試傳遞'[「vecdiff.py」,「file1」,「file2」]或者,如果你堅持使用字符串,將'shell = True'作爲參數傳遞給'Popen'。前者是可取的。 – tomasz
是的,它有一個小修正:shell = True –
如果您使用subprocess.Popen()
,則可以使用communicate()
保存輸出。例如:
proc = subprocess.Popen("./vecdiff.py file1 file2", stdout=subprocess.PIPE)
output = proc.communicate()
您可能想要除去'> file3'部分,因爲您希望運行'vecdiff.py'的輸出直接轉到標準輸出而不是文件。 – Michael0x2a
哈哈,我的壞。我只是複製粘貼他的命令。 –
我試圖使用這種方法,但出現錯誤: proc = subprocess.Popen(「./ vecdiff.py tr {0} .init.pdb TR {0} TS049_1.pdb」.format(tid),stdout = subprocess.PIPE) 文件「/usr/lib/python3.2/subprocess.py」,第745行,在__init__中 restore_signals,start_new_session) 文件「/usr/lib/python3.2/subprocess.py」,行1361,在_execute_child 提高child_exception_type(errno_num,ERR_MSG) OSERROR:[錯誤2]沒有這樣的文件或目錄: './vecdiff.py tr674.init.pdb TR674TS049_1.pdb' –
輕鬆與plumbum完成:
from plumbum.cmd import python
cmd = python['./vecdiff.py']['file1', 'file2']
for line in cmd().splitlines():
print line
的簡單方法是調用subprocess.check_output
它調用的過程和返回它的輸出(或引發非歸零碼異常事件,但你仍然可以通過異常對象訪問輸出)。它可以很容易地處理STDOUT
和STDERR
(默認情況下只有STDOUT
)。從手動
例子:
>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'
如果你的進程產生大量的數據,你想處理它,而它的運行,你就必須打開管道並使用communicate
中所描述其他答案。
[Python中反向等效項]的可能重複項目(http://stackoverflow.com/questions/1410976/equivalent-of-backticks-in-python) –