8
我需要将所有打印语句输出到终端和文件。 我发现在this stackoverflow question 一个解决方案所以我用无法将stdout恢复到原始状态(仅限于终端)
class Tee(object):
def __init__(self, name):
self.file = open(name, "a")
self.stdout = sys.stdout
sys.stdout = self
def __del__(self):
sys.stdout = self.stdout
self.file.close()
def write(self, data):
self.file.write(data)
self.stdout.write(data)
sys.stdout = Tee("log.txt")
这就是伟大工程,
我的问题是,当我想停止写入文件,并返回到正常的操作,是只打印到终端
我试图用del(sys.stdout)来调用del方法,但没有运气。
我甚至试图最后一行改为:
multiple_print = Tee("log.txt")
sys.stdout = multiple_print
,比使用德尔(multiple_print)和失败的
不管我试过,打印的进一步用途仍被写入终端和文件都。
任何想法?
感谢。我试图让复杂的解决方案工作,忘记了基本。但是,你知道__del__为什么不起作用吗? (它包含保存在__init__部分中的sys.stdout = self.stdout) – 2012-01-08 11:52:56
请注意,您也可以使用[sys .__ stdout__](http://docs.python.org/library/sys.html#sys.__stdout__)而不是自己存储旧的参考。 – 2012-01-08 11:53:17
我更新了我的答案以解决您的后续问题!而弗雷德里克哈米迪有一个点!我不知道'sys .__ stdout__'! – 2012-01-08 11:56:08