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

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

Linda Hamilton
リリース: 2024-11-25 22:39:10
オリジナル
612 人が閲覧しました

How Can I Simultaneously Capture and Log Live Output from a Subprocess in Python?

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

subprocess.Popen を利用して外部コマンドを実行する場合、ライブ出力ストリーミングと出力の両方を取得することが困難になりますロギングとエラーチェック用のストレージ。この記事では、この問題に対処する手法を検討し、出力をログ ファイルに書き込む機能を維持しながら、リアルタイムで出力をキャプチャして表示するソリューションを提供します。

解決策 1: イテレータ ベースのアプローチ

1 つの方法では、読み取り関数からイテレータを作成し、標準出力とログの両方に出力を書き込みます。 file:

import subprocess
import sys

with open("log.txt", "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)
ログイン後にコピー

Python 3 では、バイナリ書き込みをサポートするために、「w」を「wb」に置き換えます。

解決策 2: リーダーおよびライター ファイルによるアプローチ

あるいは、リーダーおよびライター ファイルを使用して、stdout とファイルを分離することもできます。 writing:

import io
import subprocess
import sys

filename = "log.txt"
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())
ログイン後にコピー

このメソッドは、非同期の読み取りと書き込みの利点を提供しながら、データが標準出力とログ ファイルの両方に書き込まれることを保証します。

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

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