ホームページ > バックエンド開発 > Python チュートリアル > Python の「subprocess.communicate()」を使用してサブプロセス出力をリアルタイムでストリーミングする方法は?

Python の「subprocess.communicate()」を使用してサブプロセス出力をリアルタイムでストリーミングする方法は?

Patricia Arquette
リリース: 2025-01-01 00:30:19
オリジナル
863 人が閲覧しました

How to Stream Subprocess Output in Real-time using Python's `subprocess.communicate()`?

subprocess.communicate() からのストリーミング出力

Python では、subprocess.communicate() を使用して実行されるプロセスから stdout を読み取ります。期間が長くなると問題が生じる可能性があります。結果の出力が一度にすべて受信されるため、リアルタイム表示が妨げられます。

これを克服するには、処理を続行する前にプロセスを確実に終了させながら、生成された標準出力の各行を出力することができます。

Python 2

#!/usr/bin/env python2
from subprocess import Popen, PIPE

p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line)
p.wait()  # Wait for subprocess termination
ログイン後にコピー

Python 3

#!/usr/bin/env python3
from subprocess import Popen, PIPE

with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stdout:
        print(line, end='')
ログイン後にコピー

この修正されたアプローチは、バッファ遅延をバイパスして、書き込み時にラインを継続的に読み取ります。プロセスはブロック動作を維持し、終了するまで実行を停止します。

以上がPython の「subprocess.communicate()」を使用してサブプロセス出力をリアルタイムでストリーミングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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