1
我有一個腳本,安排一個不同的程序,有時可以並行運行(即我可以多次調用該函數)的長時間運行。我想火,而忘記了這些孩子,所以我現在有:Python子程序讀取標準輸出/標準錯誤,如果程序在<10秒內崩潰
p = subprocess.Popen(cmd, shell=False)
time.sleep(20)
result = p.poll()
if result is not None and result != 0:
print("Child failed to start with exit code: {}".format(result))
return False
return True
這非常適用於大多數情況,但我想獲得的標準輸出/標準錯誤的孩子,但只有在它失敗的情況下運行超過10秒。
根據我的理解,使用Popen(..., stdout=PIPE)
將意味着如果我只是忽略子進程對象,那麼緩衝區將填充並且子進程將掛起。
我該如何解決這個問題,以免它掛起。以某種方式完全可以換出PIPE嗎?
p = subprocess.Popen(cmd, shell=False, stdout=PIPE, stderr=PIPE)
time.sleep(20)
result = p.poll()
if result is not None and result != 0:
print("Child failed to start with exit code: {}".format(result))
stdout, stderr = p.communicate()
print("STDOUT:", stdout)
print("STDERR:", stderr)
return False
return True
它也是安全的假設,我可以很容易地保持,將在緩存器中的第一個10秒內產生的輸出。