11

print ステートメントを頻繁に使用する長い python スクリプトがあります。すべての print ステートメントをテキスト ファイルなどに記録するコードを追加できるかどうか疑問に思っていました。プログラム全体でユーザーにプロンプ​​トが表示されるので、すべての print ステートメントをコマンド ラインに移動する必要があります。可能であれば、ユーザーの入力をログに記録することも有益です。

これは私の質問にいくらか答えますが、「print」ステートメントがコマンドラインに出力されなくなった場所になります

Python の「print」出力をロガーにリダイレクトする

4

5 に答える 5

16

これをスクリプトに追加できます。

import sys
sys.stdout = open('logfile', 'w')

これにより、print ステートメントが に書き込まれlogfileます。

stdoutファイルに印刷するオプションが必要な場合は、これを試すことができます。

class Tee(object):
    def __init__(self, *files):
        self.files = files
    def write(self, obj):
        for f in self.files:
            f.write(obj)

f = open('logfile', 'w')
backup = sys.stdout
sys.stdout = Tee(sys.stdout, f)

print "hello world"  # this should appear in stdout and in file

コンソールへの印刷だけに戻すには、「バックアップ」を復元するだけです

sys.stdout = backup
于 2013-07-25T19:11:45.120 に答える
10

あなたが説明したことを行うプログラムは次のとおりです。

#! /usr/bin/python3

class Tee:
    def write(self, *args, **kwargs):
        self.out1.write(*args, **kwargs)
        self.out2.write(*args, **kwargs)
    def __init__(self, out1, out2):
        self.out1 = out1
        self.out2 = out2

import sys
sys.stdout = Tee(open("/tmp/log.txt", "w"), sys.stdout)

print("hello")
于 2013-07-25T19:15:24.560 に答える
-2

うーん... print 関数に渡されたものをすべてログに記録する独自の print() 関数とデコレータを実装するのは難しいですか?

def logger(func):
    def inner(*args, **kwargs):
        log(*args, **kwargs)  # your logging logic
        return func(*args, **kwargs)
    return inner

@logger
def lprint(string_to_print):
    print(string_to_print)   
于 2013-07-25T19:37:59.937 に答える