ホームページ > バックエンド開発 > Python チュートリアル > Python で出力を 1 行ずつストリーミング サブプロセスする方法は?

Python で出力を 1 行ずつストリーミング サブプロセスする方法は?

DDD
リリース: 2024-12-13 19:47:18
オリジナル
713 人が閲覧しました

How to Stream Subprocess Output Line by Line in Python?

サブプロセス出力を行ごとにストリーミング

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート