print
すべてのコマンドの記録を保持し、各コマンドの文字列をファイルの新しい行に格納する関数を作成したいと思います。
def log(line):
with open('file.txt', "a") as f:
f.write('\n' + line)
これは私が持っているものですが、Pythonを使用して私が言ったことを行う方法はありますか?
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 ストリームを介して自家製のフックを使用するよりも、logging
moduleのようなものを使用する方がはるかに優れています。