ホームページ > バックエンド開発 > Python チュートリアル > Python アプリケーションの出力 (システム コールを含む) をコンソールとログ ファイルの両方に複製するにはどうすればよいですか?

Python アプリケーションの出力 (システム コールを含む) をコンソールとログ ファイルの両方に複製するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-29 08:24:14
オリジナル
336 人が閲覧しました

How Can I Duplicate Python Application Output (Including System Calls) to Both the Console and a Log File?

出力をログ ファイルにリダイレクトおよび複製する

あなたは、コマンド ライン 'tee' ユーティリティの機能を実現したいと考えています。 Python アプリケーションによって生成されたデータ (システム コール出力を含む) がログに複製されます。 file.

リダイレクト

最初のアプローチでは、sys.stdout と sys.stderr のファイル記述子をログ ファイルに複製し、出力をログ ファイルに正常にリダイレクトしました。デーモンモード。ただし、この方法は、画面上での出力の同時表示を妨げる​​ため、対話モードでは不十分です。

複製

複製を実現するには、単純に dup2 呼び出しを逆にします。十分ではありません。代わりに、sys.stdout をインターセプトし、書き込まれたデータを画面とログ ファイルの両方に複製する手法を採用できます。

解決策

以下のスニペットは、エレガントなソリューション:

class Tee(object):
    def __init__(self, name, mode):
        self.file = open(name, mode)
        self.stdout = sys.stdout
        sys.stdout = self
    def __del__(self):
        sys.stdout = self.stdout
        self.file.close()
    def write(self, data):
        self.file.write(data)
        self.stdout.write(data)
    def flush(self):
        self.file.flush()
ログイン後にコピー

このクラスはファイル記述子の重複をカプセル化し、シームレスな方法を提供します。 sys.stdout とログ ファイルの両方に書き込みます。 Tee のインスタンスを初期化し、ログ ファイルの詳細を引数として渡すことができます。その後、インスタンスは新しい sys.stdout になります。

結論

このメソッドを使用すると、リダイレクト (デーモン モード) と複製 (対話モード) の両方を実現できます。 ) システム コール出力を含むすべてのアプリケーション出力をログ ファイルに記録します。

以上がPython アプリケーションの出力 (システム コールを含む) をコンソールとログ ファイルの両方に複製するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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