我從一個Python腳本運行的程序(目前os.system
)殺子。但是,有時程序掛起,在一個點,我想殺死它,如果沒有在一定的時間間隔後寫入到標準輸出或標準錯誤。對程序的簡單超時將無法正常工作,因爲這些代碼通常運行了很長一段時間(數小時至數天),有時它掛起它仍然有很長的路要走。如何如果標準輸出沒有活動/標準錯誤
看來subprocess.Popen
是要走的路,但我還沒有找到如何做到這一點的好例子。我也想把stdout/stderr寫入一個文件。
基於一些例子,我想是這樣的:
p = Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None)
while True:
line = p.stdout.readline()
outfile.write(line)
# save current time or something, compare to time of
# previous loop, if larger than timeout, kill process
但我不知道如何實現時間循環,以及如何確保while
不會永遠運行時該過程最終會自行終止(並且不會掛起)。任何指針將不勝感激。
爲什麼不修復了子進程因此它不掛? – 2013-03-17 13:45:52
@JohnZwinck,當然是最好的解決方案。但是,在這種情況下,這種情況很少發生,很難複製。在某些情況下,由於進程外的原因(例如文件系統等),它也會掛起。 – tiago 2013-03-17 14:02:20