ホームページ >バックエンド開発 >Python チュートリアル >Python で出力を 1 行ずつストリーミング サブプロセスする方法は?
サブプロセス出力を行ごとにストリーミング
Python のサブプロセス経由で呼び出されるノイズの多い Linux ユーティリティを処理する場合、両方の出力を効率的にログ ファイルにキャプチャしますそしてそれをユーザーに表示するのは難しい場合があります。
問題:
最初、Python スクリプトは次のコードを使用してサブプロセス出力をキャプチャしようとしました:
for line in proc.stdout: # Filter output here print("test:", line.rstrip())
しかし、このアプローチでは、ストリーミング出力ラインの望ましい動作が示されませんでした。ライン。代わりに、大量の出力が生成された後にのみ出力が表示されました。
解決策:
問題は、proc.stdout の line の反復子の使用にあります。これは出力全体を前もって読み取ります。これに対処するには、代わりに readline() を使用する必要があります。
# Filter output import subprocess proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE) while True: line = proc.stdout.readline() if not line: break # Filter output here print("test:", line.rstrip())
この変更により、出力は希望どおりに 1 行ずつストリーミングされるようになりました。
バッファリングに関する考慮事項:
サブプロセスは依然として出力をバッファリングする可能性があることに注意することが重要です。これに対処するには、出力をタイムリーに表示するためにフラッシュ メソッドまたはその他のテクニックが必要になる場合があります。
以上がPython で出力を 1 行ずつストリーミング サブプロセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。