2012-02-05 122 views
2

我打電話給一個子進程並希望禁用任何輸出到我的shell。我試圖用做到這一點:防止子進程的子進程寫入標準輸出

with tempfile.TemporaryFile() as tempf: 
     proc = Popen(cmd, stdout=tempf, stderr=tempf) 
     proc.communicate() 

但仍有出現在終端輸出的一些(但少於正常)。問題可能是被調用的進程使用了​​os.execvp?任何建議,以完全禁用所有子過程的輸出?

注意

重定向到devnull是禁止輸出的一個更好的辦法:

with open(os.devnull, 'w') as tempf: 
    proc = Popen(cmd, stdout=tempf, stderr=tempf) 
    proc.communicate() 

回答過的問題!

非常簡單的解決方案:被調用的進程使用CORBA,服務器實際上是打印出來的。

+0

你的例子使用''popen()'',而不是''subprocess'' – Carpetsmoker 2012-02-05 22:46:07

+0

subprocess默認情況下會繼承父類的stdout和stderr。在尋找wild ttys之後,sububprocess無法獲得你的標準輸入。你正在執行哪些程序? – phihag 2012-02-05 22:46:43

+1

@Carpetsmoker:Popen生活在更新的Python版本的模塊子進程中 – 2012-02-05 22:47:16

回答

-2

如上所述,被調用進程正在調用一個服務器,該服務器產生了mysterios stdout。

相關問題