如何确保 io 模块在关闭垃圾收集之前没有关闭
how to make sure io module isn't shutdown before garbage collection on close
我有一个带有 __del__
方法的对象。我希望在解释器关闭时调用此方法。 __del__
方法将打开并写入特定文件。似乎 io
模块在全局垃圾回收之前关闭。
#!/usr/bin/env python3
class Foo:
def __del__(self):
with open('/tmp/doge_poop', 'w') as f:
f.write('corn kernel')
foo=Foo()
运行 上面的 MWE 给出了以下内容:
Exception ignored in: <function Foo.__del__ at 0x7f4984176310>
Traceback (most recent call last):
File "b.py", line 4, in __del__
NameError: name 'open' is not defined
找到方法:
#!/usr/bin/env python3
from atexit import register
class Foo:
def __del__(self):
with open('/tmp/doge_poop', 'w') as f:
f.write('corn kernel')
print("delete!")
foo=Foo()
@register
def _atexit():
global foo
del foo
得到群组 https://t.me/py_zh_real 的成员的帮助。
我有一个带有 __del__
方法的对象。我希望在解释器关闭时调用此方法。 __del__
方法将打开并写入特定文件。似乎 io
模块在全局垃圾回收之前关闭。
#!/usr/bin/env python3
class Foo:
def __del__(self):
with open('/tmp/doge_poop', 'w') as f:
f.write('corn kernel')
foo=Foo()
运行 上面的 MWE 给出了以下内容:
Exception ignored in: <function Foo.__del__ at 0x7f4984176310>
Traceback (most recent call last):
File "b.py", line 4, in __del__
NameError: name 'open' is not defined
找到方法:
#!/usr/bin/env python3
from atexit import register
class Foo:
def __del__(self):
with open('/tmp/doge_poop', 'w') as f:
f.write('corn kernel')
print("delete!")
foo=Foo()
@register
def _atexit():
global foo
del foo
得到群组 https://t.me/py_zh_real 的成员的帮助。