我想创建一个函数来保存每个print
命令的记录,将每个命令的字符串存储到文件中的新行中。
def log(line):
with open('file.txt', "a") as f:
f.write('\n' + line)
这就是我所拥有的,但是有什么办法可以用Python做我说的话吗?
答案 0 :(得分: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
的任何其他函数,但它通常会更好。
对于生产模式日志记录,最好使用logging
module之类的东西,而不是标准IO流上的自制钩子。