ホームページ  >  記事  >  バックエンド開発  >  Python でサブプロセス出力をリアルタイムでストリーミングするにはどうすればよいですか?

Python でサブプロセス出力をリアルタイムでストリーミングするにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-28 20:51:30545ブラウズ

How Can I Stream Subprocess Output in Real Time in Python?

プロセスの実行中にサブプロセス出力をストリーミングする

Python では、外部コマンドを実行するために、execute() メソッドがよく使用されます。ただし、デフォルトでは、プロセスが完了するまで待機してから、結合された stdout と stderr 出力を返します。これは、長時間実行されるプロセスにとっては望ましくない可能性があります。

プロセス出力のリアルタイム出力を有効にするには、反復子と Python の universal_newlines オプションの力を利用できます。次の例を考えてみましょう。

<code class="python">from __future__ import print_function # Only Python 2.x
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>

この拡張されたexecute()関数は、Popenを使用してプロセスを起動し、stdoutがパイプされ、改行が自動的に処理されるようにします(universal_newlines=True)。次に、反復子 (iter(popen.stdout.readline, '')) を使用して stdout を 1 行ずつ走査します。

このアプローチにより、ループ内で使用可能になったプロセスからの出力をストリーミングできます。リアルタイムの進行状況を表示したり、中間出力に応じて応答したりできます。

以上がPython でサブプロセス出力をリアルタイムでストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。