python - 如何确保 io 模块在关闭垃圾收集之前没有关闭
问题描述
我有一个带有__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。
推荐阅读
- javascript - 如何根据下拉菜单更改页面大小?
- java - Maven - 如何从原型创建项目
- python - 如何使用 Python websockets 库获取“ping”调用的“pong”响应?
- python - 在 Centos 8 上安装 Python 3 返回“无法同步 repo 'BaseOS' 的缓存”
- database - 如何让greenplum成为柱状数据库?
- css - 宽度约为 1097px 的 CSS 断点
- android - 打开设置后检查用户授予特定权限
- php - 在创建数据 Codeigniter 时更新数据
- java - 如何在 Java 中优化此方法?我得到时间限制超过
- python - 如果满足条件,如何将像素值设置为特定值?