1

printすべてのコマンドの記録を保持し、各コマンドの文字列をファイルの新しい行に格納する関数を作成したいと思います。

def log(line):
    with open('file.txt', "a") as f:
        f.write('\n' + line)

これは私が持っているものですが、Pythonを使用して私が言ったことを行う方法はありますか?

4

1 に答える 1

2

stdoutカスタムクラスに置き換えてみてください:

import sys
class LoggedStdout():
    def __init__(self, filename = None):
        self.filename = filename
    def write(self, text):
        sys.__stdout__.write(text)
        if not self.filename is None:
            self.log(text)
    def log(self, line):
        with open(self.filename, "a") as f:
            f.write('\n' + line)

sys.stdout = LoggedStdout('file.txt')

print 'Hello world!'

printこれは、 だけでなく、 に何かを出力する他の関数にも影響しますstdoutが、多くの場合はさらに優れています。

本番モードのロギングでは、標準の IO ストリームを介して自家製のフックを使用するよりも、loggingmoduleのようなものを使用する方がはるかに優れています。

于 2012-05-27T04:11:23.290 に答える