我需要将所有打印语句输出到终端和文件.我在这个stackoverflow问题中找到了一个解决方案, 所以我使用
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")
Run Code Online (Sandbox Code Playgroud)
这很棒,
我的问题是当我想停止写入文件并返回正常操作时,只打印到终端
我试图使用del(sys.stdout)来调用del方法而没有运气.
我甚至试图将最后一行更改为:
multiple_print = Tee("log.txt")
sys.stdout = multiple_print
Run Code Online (Sandbox Code Playgroud)
而且使用del(multiple_print)并失败
无论我尝试了什么,进一步使用打印仍然写入终端和文件两者.
有任何想法吗?
Don*_*ion 15
在重新分配之前,您需要保存对原始文件描述符的引用:
oldstdout = sys.stdout
Run Code Online (Sandbox Code Playgroud)
然后重新分配给它sys.stdout!
该del语句不__del__直接调用,而是减少对象的引用计数器.__del__如果引用计数器达到零并且您的对象即将被销毁,则调用该方法.所以你不能强制重新分配,因为它取决于垃圾收集器,调用你的__del__方法.
您需要直接重新分配sys.stdout变量:
尝试:
sys.stdout = sys.__stdout__
Run Code Online (Sandbox Code Playgroud)