subprocess.communicate() からのストリーミング出力
Python では、subprocess.communicate() を使用して実行されるプロセスから stdout を読み取ります。期間が長くなると問題が生じる可能性があります。結果の出力が一度にすべて受信されるため、リアルタイム表示が妨げられます。
これを克服するには、処理を続行する前にプロセスを確実に終了させながら、生成された標準出力の各行を出力することができます。
Python 2
#!/usr/bin/env python2 from subprocess import Popen, PIPE p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1) with p.stdout: for line in iter(p.stdout.readline, b''): print(line) p.wait() # Wait for subprocess termination
Python 3
#!/usr/bin/env python3 from subprocess import Popen, PIPE with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p: for line in p.stdout: print(line, end='')
この修正されたアプローチは、バッファ遅延をバイパスして、書き込み時にラインを継続的に読み取ります。プロセスはブロック動作を維持し、終了するまで実行を停止します。
以上がPython の「subprocess.communicate()」を使用してサブプロセス出力をリアルタイムでストリーミングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。