プロセスの実行中にサブプロセス出力をストリーミングする
Python では、外部コマンドを実行するために、execute() メソッドがよく使用されます。ただし、デフォルトでは、プロセスが完了するまで待機してから、結合された stdout と stderr 出力を返します。これは、長時間実行されるプロセスにとっては望ましくない可能性があります。
プロセス出力のリアルタイム出力を有効にするには、反復子と Python の universal_newlines オプションの力を利用できます。次の例を考えてみましょう。
<code class="python">from __future__ import print_function # Only Python 2.x import subprocess def execute(cmd): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) for stdout_line in iter(popen.stdout.readline, ''): yield stdout_line popen.stdout.close() return_code = popen.wait() if return_code: raise subprocess.CalledProcessError(return_code, cmd)</code>
この拡張されたexecute()関数は、Popenを使用してプロセスを起動し、stdoutがパイプされ、改行が自動的に処理されるようにします(universal_newlines=True)。次に、反復子 (iter(popen.stdout.readline, '')) を使用して stdout を 1 行ずつ走査します。
このアプローチにより、ループ内で使用可能になったプロセスからの出力をストリーミングできます。リアルタイムの進行状況を表示したり、中間出力に応じて応答したりできます。
以上がPython でサブプロセス出力をリアルタイムでストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。