下面的代码创建了一个“tee”对象,它将标准输出发送到文件和终端。
如果del t在我完成开球后执行以下操作,则不会删除对象并且不会__del__()调用成员(因此开球会继续):
t = tee("foo.txt")
print("bar")
del t
但如果我__del__()直接打电话,一切正常:
t = tee("foo.txt")
print("bar")
t.__del__()
为什么不del工作?这样做的正确方法是什么?
class tee():
def __init__(self, filepath):
self.old_stdout = sys.stdout
self.old_stderr = sys.stderr
self.name = filepath
sys.stdout = self
sys.stderr = self
def write(self, text):
self.old_stdout.write(text)
with open(self.name, 'a', encoding="utf-8") as f:
f.write(text)
def flush(self):
pass
def __del__(self):
sys.stdout = self.old_stdout
sys.stdout = self.old_stderr
慕田峪4524236
相关分类