2014-10-22 77 views
0

嗨之後我寫在窗口一個Python腳本,並使用子Python的Windows腳本子進程繼續輸出腳本結束

我有一個像

結果= subprocess.Popen(['XYZ線。 exe'],stdout = subprocess.PIPE)

腳本結束後,我回到cmd中的promp carrot,我看到腳本的更多輸出被打印出來。 我看到的東西像

找不到xxx_echo.txt

反覆打印出來。

如何正確關閉Windows中的子進程?

+1

你是如何關閉子過程的? – cwallenpoole 2014-10-22 04:09:36

+0

@cwallenpoole哈哈。我不是...... – m126531 2014-10-23 19:09:38

回答

3

Could Not Find xxx_echo.txt看起來像一條錯誤消息,可能會打印在stderr上。您撥打Popen()的電話不會收集孩子的標準輸出,因此它將打印在您的終端中。

如果您的腳本沒有等待孩子完成,那麼您的腳本退出後,孩子仍然可能正在執行。您應該致電wait()等待孩子完成執行。如果您不想等待,請致電terminate()終止子進程。

如果您不想將它轉儲到終端,您還應該收集stderr。

child = subprocess.Popen(['xyz.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
child.wait() 
print child.returncode 
+0

那是;原因:) – vks 2014-10-22 04:48:22

+0

謝謝!這解決了我的問題。 – m126531 2014-10-23 19:08:51

0

您需要在退出主腳本之前調用results.kill()或results.terminate()(它們是Windows上的別名)來結束子進程。

0

你必須調用terminate()方法:

results.terminate() 

還有kill()被卡住的子流程。