2017-06-02 279 views
0

我使用subprocess.PopenPopen.communicate運行一個超時的過程獲取輸出,類似於給出的建議是這樣一個問題:Subprocess.Popen即使在超時的情況下

Subprocess timeout failure

因此,我現在用的是下面的代碼:

with Popen(["strace","/usr/bin/wireshark"], stdout=subprocess.PIPE,stderr=subprocess.PIPE, preexec_fn=os.setsid) as process: 
    try: 
     output = process.communicate(timeout=2)[0] 
     print("Output try", output) 
    except TimeoutExpired: 
     os.killpg(process.pid, signal.SIGINT) # send signal to the process group 
     output = process.communicate()[0] 
     print("Output except",output) 
return output 

而且我得到以下輸出:

Output except b'' 

b''作爲返回值。

即使TimeoutExpired異常被引發,我怎樣才能獲得進程的輸出(輸出直到它被殺死)?

回答

0

Popen對象有kill方法,爲什麼不使用它呢?一個進程被殺死後,你可以讀取它的stdout。這是否工作?

with Popen(["strace","/usr/bin/wireshark"], stdout=subprocess.PIPE,stderr=subprocess.PIPE, preexec_fn=os.setsid) as process: 
    try: 
     output = process.communicate(timeout=2)[0] 
     print("Output try", output) 
    except TimeoutExpired: 
     process.kill() 
     output = process.stdout.read().decode() 
     print("Output except",output) 
return output 
+0

不幸的是,因爲這不殺死進程組 - 因此python腳本被阻止。如果我手動殺死進程,輸出變量保持爲空。 – Sleik

相關問題