shutil.rmtree(...) 在我的脚本中不起作用
我在我的析构函数里尝试删除一个创建的目录:
shutil.rmtree("C:\\projects\\project_alpha\\tmp")
在我的Python脚本中这样做不行,但当我在Python控制台里执行这个命令时,它就能正常工作,临时目录也被删除了。
这之间有什么区别呢?
1 个回答
4
我猜你说的“析构函数”是指 __del__
这个方法。
根据官方文档关于del的说明:
当解释器退出时,并不能保证del()方法会被调用,即使对象仍然存在。
你可能想要做的是注册一个atexit处理器。
比如在模块级别:
import atexit
def cleanup_directories():
directories = ["C:\\projects\\project_alpha\\tmp",]
for path in directories:
if os.path.exists(path) and os.path.isdir(path):
shutil.rmtree(path)
atexit.register(cleanup_directories)
使用atexit注册的函数会在解释器退出时运行,无论解释器是怎么退出的。
当然,你也可以做一些比较“黑科技”的事情,比如强制垃圾回收器运行 (import gc; gc.collect()
),这可能会强制你的del方法运行,但我觉得这样做不是个好主意。
;-)