Pythonでsubprocess.Popenを使用してプログラムがハングする場合は、どうすればよいですか?
subprocess.Popen メソッドがプログラムを実行したまま止まってしまう場合、その原因と解決方法はいくつかあります。
- コミュニケーションする。
process = subprocess.Popen(['command'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
- コミュニケーションを取る (komyuni-ke-shon wo toru)
process = subprocess.Popen(['command'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
子プロセスの出力を読み取るために、stdout.read() メソッドを使用することもできます。例えば、
process = subprocess.Popen(['command'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = process.stdout.read()
- コミュニケーションをとる
process = subprocess.Popen(['command'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate(input='input_data')
- タイムアウト
- プロセスが指定した時間待機する。
process = subprocess.Popen(['command'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try:
process.wait(timeout=10)
except subprocess.TimeoutExpired:
process.kill()
output, error = process.communicate()