ホームページ >バックエンド開発 >Python チュートリアル >Python のサブプロセス コマンドからライブ出力を取得するにはどうすればよいですか?

Python のサブプロセス コマンドからライブ出力を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-03 08:52:09355ブラウズ

How Can I Get Live Output from a Subprocess Command in Python?

サブプロセス コマンドからのライブ出力

Python では、サブプロセス コマンドからの出力をキャプチャし、同時に以下を使用してライブ ストリーミング出力を生成できます。次のアプローチ:

Iterator

import subprocess
import sys

p = subprocess.Popen(['command'], stdout=subprocess.PIPE)
for line in iter(lambda: p.stdout.readline(1), ''):
    sys.stdout.buffer.write(line)

FileWriter と FileReader の使用

import io
import time
import subprocess
import sys

log = 'test.log'
with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader:
    p = subprocess.Popen(['command'], stdout=writer)
    while p.poll() is None:
        sys.stdout.write(reader.read())
        time.sleep(0.5)
    # Read the remaining
    sys.stdout.write(reader.read())

元のコードのリファクタリング

元のコードでは、次のようにサブプロセスを作成した後にライブ出力をキャプチャできます。

ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
while not ret_val.poll():
    log_file.flush()
    for line in iter(lambda: ret_val.stdout.readline(1), ''):
        if line:
            print(line)
            log_file.write(line.decode())

このメソッドを使用すると、stdout ストリームと stderr ストリームの両方をキャプチャし、ライブ出力を出力すると同時にログ ファイルに書き込むことができます。

以上がPython のサブプロセス コマンドからライブ出力を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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