2011-05-19 129 views
7

我正在使用子流程模塊從python運行二進制文件。python子流程輸出到標準輸出

拍攝由二進制產生的輸出,我使用:

proc = subprocess.Popen (command_args, shell=False, stdout=subprocess.PIPE) 
out = proc.communicate()[0] 
#print the output of the child process to stdout 
print (out) 

這樣做是印刷過程中的輸出後,已完成執行。無論如何,我可以打印此輸出到標準輸出程序正在執行?我真的需要看看輸出是什麼,因爲這些程序可以運行很長時間。

感謝您的幫助。

+0

沒關係,大家好,我想我找到了解決辦法: '基本上,你有3種選擇: 使用線程到另一個線程讀取而不會阻塞主線程。 選擇stdout,stderr而不是通信。這樣,您可以在數據可用時閱讀並避免阻塞。 讓圖書館解決這個問題,扭曲是一個明顯的選擇。「#: – therealtypon 2011-05-19 17:19:39

+4

如果你找到另一個答案,像http://stackoverflow.com/questions/4585692/python-nonblocking-subprocess-check-stdout/4585898#4585898,請鏈接而不是在你自己的問題上重複評論的答案。 – phooji 2011-05-19 17:23:06

+0

對不起。我認爲評論中的觀點是stackoverflow.com/questions/4585692/... 的蒸餾本質下次我會記住這一點 – therealtypon 2011-05-20 20:51:33

回答

7

根本就沒有輸出發送到管道:

proc = subprocess.Popen (command_args, shell=False) 
proc.communicate() 
+2

這是行不通的:溝通退貨(None,None) – josh 2013-07-24 18:44:09

+2

@josh:是的,這是預期的,以及代碼不將結果存儲在變量中的原因。由於我們不會將輸出發送到管道,子進程將繼承當前進程的stdout,這意味着所有內容都將直接打印到終端。 – 2013-07-24 19:28:06

+0

對不起,你沒錯 - 我沒有仔細閱讀這個問題,我認爲他想做我想做的事情,也就是讓實時輸出到標準輸出,然後捕獲輸出之後 – josh 2013-07-25 15:19:36