プロセス実行中の継続的な出力表示
Python スクリプトでは、サブプロセスを利用して外部プログラムを実行することがよくあります。これは強力な機能ですが、出力を取得する前にプロセスが完了するまで待つのはイライラする場合があります。これに対処するために、プロセスの実行中にプロセス出力を継続的にストリーミングする方法を検討してみましょう。
伝統的に、プロセス終了後に subprocess.communicate() を使用してプロセスの出力全体をキャプチャします。ただし、このアプローチでは、出力を表示する前にプロセスが完全に完了する必要があります。
連続出力を有効にするには、 fd.readline() と組み合わせて iter 関数を利用できます。これにより、プロセスの stdout ストリームを反復処理して、利用可能になった行をキャプチャできるようになります:
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)
この拡張バージョンでは、標準出力の各行が利用可能になったときに生成します。これにより、スクリプトは、プロセスによって生成された出力を継続的に表示できます。
次に例を示します:
for path in execute(["locate", "a"]):
print(path, end="")
このアプローチを使用すると、「locate」コマンドで見つかった検索クエリ「a」に一致するパスを継続的に表示し、リアルタイムのフィードバックを提供できます。プロセスの進行状況。
この手法により、継続的な出力監視が可能になり、外部プロセスを起動するスクリプトの対話性とユーザー エクスペリエンスが向上します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3