私はスクリプトを持っている場合、そのスケジュール時々並列に実行することができます別のプログラム(すなわち、私は複数回以下の機能を呼び出すことができます)のロングランを。私は火、これらの子供たちを忘れるしたいと思いますので、私は現在持っている: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をNoneに交換することは可能ですか?
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秒間に生成される出力をバッファに保持することも簡単にできます。