0

私は3つのスクリプトを持っています。1 つはstarttest.py、 で呼び出されたメソッドの実行を開始するものtest.pyです。メソッドは で定義されていmodule.pyます。

Starttest.py各ファイルには多くの印刷ステートメントがあり、ファイル自体からログ ファイルに各印刷ステートメントをキャプチャしたいと考えています。ファイルで使用しようとしsys.stdoutましstarttest.pyたが、この関数はファイルからのみ印刷ステートメントを取得しstarttest.pyます。印刷ステートメントを制御しtest.pyたりファイルしたりすることはできません。module.py

すべてのファイルから印刷ステートメントを 1 か所だけでキャプチャするための提案はありますか?

4

2 に答える 2

1

test.pyまたはから何かをインポートする前module.pyに、tyesys.stdoutファイル オブジェクトを好みのものに置き換えます。

import sys

sys.stdout = open("test-output.txt", "wt")

# Import the rest

Unix ライクなオペレーティング システムで実行している場合は、ファイル オブジェクト参照を置き換える必要のない、より安全な方法があります。特に、上書きsys.stdoutは前のオブジェクトが破棄されることを保証しないため:

import os
import sys

fd = os.open("test-output.txt", os.O_WRONLY | os.O_CREAT, 0644)
os.dup2(fd, sys.stdout.fileno())
os.close(fd)

上記のトリックは、Python のほとんどすべてのデーモン化実装で使用されていることに注意してください。

直接関係はありませんが、シェルを使用してコマンド出力をファイルにリダイレクトできることも覚えておいてください (Windows でも機能します)。

python starttest.py >test-output.txt
于 2013-02-04T01:09:56.830 に答える
0

Python に付属の logging モジュールを見てください。

于 2013-02-04T01:08:43.083 に答える