プロセス実行中の継続的な出力表示
Python スクリプトでは、サブプロセスを利用して外部プログラムを実行することがよくあります。これは強力な機能ですが、出力を取得する前にプロセスが完了するまで待つのはイライラする場合があります。これに対処するために、プロセスの実行中にプロセス出力を継続的にストリーミングする方法を検討してみましょう。
伝統的に、プロセス終了後に subprocess.communicate() を使用してプロセスの出力全体をキャプチャします。ただし、このアプローチでは、出力を表示する前にプロセスが完全に完了する必要があります。
連続出力を有効にするには、fd.readline() と組み合わせて iter 関数を利用できます。これにより、プロセスの stdout ストリームを反復処理し、利用可能になった行をキャプチャすることができます。
<code class="python">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>
この拡張バージョンでは、利用可能になった stdout の各行を取得します。これにより、スクリプトは、プロセスによって生成された出力を継続的に表示できます。
例を次に示します。
<code class="python">for path in execute(["locate", "a"]): print(path, end="")</code>
このアプローチを使用すると、検索クエリに一致するパスを継続的に表示できます。 「locate」コマンドで見つかった「a」を取得し、プロセスの進行状況に関するリアルタイムのフィードバックを提供します。
この技術により、継続的な出力監視が可能になり、スクリプトの対話性とユーザー エクスペリエンスが向上します。外部プロセスを起動します。
以上がPython でプロセス出力をリアルタイムでストリーミングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。