私はPythonスクリプト(現在はos.system
)からプログラムを実行しています。ただし、ある時点でプログラムがハングすることがあり、一定の時間間隔が経過してもstdoutまたはstderrに何も書き込まれない場合は、プログラムを強制終了したいと思います。このコードは通常、非常に長い時間(数時間から数日)実行され、まだ長い道のりが続く前にハングすることがあるため、プログラムの単純なタイムアウトは機能しません。
それ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
しかし、タイムループを実装する方法と、プロセスが最終的に自動的に終了する(そしてハングしない)ときにが永久に実行されないようにする方法がわかりません。任意のポインタをいただければ幸いです。