Python の subprocess.Popen() オブジェクトに関する質問 (
stdout/stderr 用に生成されるバイト数が OS パイプ バッファーをいっぱいにせず、OS パイプ バッファーがさらにデータを受け入れるのを待つデッドロックを作成するというシナリオを想定してください)
1) p.stdout.read() と p.wait() の順序は重要ですか?
2) プロセスが終了するまで stdout/stderr subprocess.PIPE ブロックで read() を行いますか?
3) stdout/stderr subprocess.PIPE ファイルのオブジェクトとデータは、プロセスが終了した後でも利用できますか?
import subprocess
process = subprocess.Popen(args="ls", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout = process.stdout.read()
# Does the above read() block until the process has terminated?
stderr = process.stderr.read()
return_code = process.wait()
process = subprocess.Popen(args="ls", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
return_code = process.wait()
# Are stdout and stderr pipes available now, even after the process terminated?
stdout = process.stdout.read()
stderr = process.stderr.read()