ホームページ >バックエンド開発 >Python チュートリアル >ライブ サブプロセス出力をキャプチャし、同時にログに記録するにはどうすればよいですか?

ライブ サブプロセス出力をキャプチャし、同時にログに記録するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-02 10:48:151025ブラウズ

How to Capture Live Subprocess Output and Log it Simultaneously?

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

両方のライブ出力をキャプチャし、ログ用に保存するには、次のいずれかのアプローチを使用します。

イテレーターの使用

作成サブプロセスの標準出力から読み取り、同時に書き込むイテレータ:

import subprocess
import sys

with open("test.log", "wb") as f:
    process = subprocess.Popen(your_command, stdout=subprocess.PIPE)
    for c in iter(lambda: process.stdout.read(1), b""):
        sys.stdout.buffer.write(c)
        f.buffer.write(c)

ライターとリーダーの使用

ライターをサブプロセスに渡し、サブプロセスから読み取る読者:

import io
import time
import subprocess
import sys

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

以上がライブ サブプロセス出力をキャプチャし、同時にログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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