2017-04-20 42 views
0

我想在引發TimeoutExpired異常時獲取子進程輸出(在Windows上)。有任何想法嗎?終止後Python捕獲子進程輸出

try: 
    proc = subprocess.run(cmd,timeout=3) 
except subprocess.TimeoutExpired: 
    print(???) 

回答

1

您需要在訂貨時超時趕上過程輸出使用Popensubprocess.PIPE。特別是Popen.communicate是你需要的。 下面是一個例子

proc = subprocess.Popen(["ping", "192.168.1.1"], 
         stdout=subprocess.PIPE) 

try: 
    output, error = proc.communicate(timeout=2) 
except subprocess.TimeoutExpired: 
    proc.kill() 
    output, error = proc.communicate() 
    print(output) 
    print(error) 

這將打印過程輸出到超時期滿。

+0

thnx爲答案@Leonardo。我嘗試了它,但它只是打印命令而不是過程的輸出:「命令'[...,...]'在4秒後超時」(就像您示例中的第二個輸出行)。我想在它終止時打印子流程輸出。 –

+0

@Ali_G我找到了一個解決方案,請讓我知道。 –

+0

這對我來說都不起作用......我認爲問題在於@ J.F提到的問題。塞巴斯蒂安在一些其他職位(即[鏈接](http://stackoverflow.com/questions/33886406/how-to-avoid-the-deadlock-in-a-subprocess-without-using-communicate/33886970#33886970)) 。無論如何,我們還需要 Thnx! –