我需要一個執行一個命令,產生大量的輸出並需要大量的時間來執行(> 30分鐘)。我正在考慮使用subprocess.Popen來做到這一點。我需要捕獲命令的輸出,所以我將PIPE傳遞給stdout和stderr。需要避免沒有通信的子進程死鎖
使用Popen.wait()時的死鎖問題在許多論壇上都有很好的記錄,所以Popen.communicate()是避免死鎖的建議方式。該解決方案的問題是通信()阻塞,直到命令完成。我需要打印執行命令時到達標準輸出的所有內容。如果20分鐘後沒有輸出,腳本執行將被終止。
這裏有一些限制,我需要尊重:
- 我的Python版本是2.4.2,我不能升級。
- 如果溶液仍然使用子,我需要通過subprocess.PIPE所有STD處理,以避免這個錯誤:http://bugs.python.org/issue1124861
有沒有辦法做到這一點?
(從谷歌即將?)所有管道就會死鎖的喉管緩衝區的一個被填滿而沒有閱讀。例如當stderr被填充時stdout死鎖。切勿傳遞您不想閱讀的PIPE。 – 2014-05-07 11:07:07