ホームページ > バックエンド開発 > Python チュートリアル > Python でサブプロセスからリアルタイム出力を取得する方法

Python でサブプロセスからリアルタイム出力を取得する方法

Mary-Kate Olsen
リリース: 2024-10-29 05:49:31
オリジナル
790 人が閲覧しました

How to Get Real-Time Output from Subprocesses in Python?

サブプロセスからのリアルタイム出力

Python では、サブプロセス モジュールは外部プログラムを実行する便利な方法を提供します。ただし、デフォルトでは、すべてのプログラムの出力をキャプチャし、プロセスが完了するとそれを返します。これは、長時間実行されるプロセスでは問題となる可能性があります。

反復出力ポーリングの紹介

これに対処するには、iter() 関数を利用して出力を 1 行ずつ取得できます。コマンドによって生成されるとおりです。このアプローチを実装する、execute() 関数の修正バージョンを次に示します。

<code class="python">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>
ログイン後にコピー

使用例

これで、プロセスの出力をそのまま反復処理できるようになります。利用可能になります:

<code class="python">for path in execute(["locate", "a"]):
    print(path, end="")</code>
ログイン後にコピー

この例では、ファイルを検索する際に、locate a コマンドの出力を継続的に出力します。

ポーリング間隔

この方法ではリアルタイムの出力が提供されますが、ポーリング間隔はパフォーマンスに影響を与える可能性があります。 universal_newlines パラメーターを使用すると、バイトではなくテキスト行が確実に取得されるため、追加のオーバーヘッドが発生します。ポーリングを最適化するには、プロセスの出力をチェックする頻度を減らすことができます。

以上がPython でサブプロセスからリアルタイム出力を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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