shutil.rmtree(...) 在我的脚本中不起作用

3 投票
1 回答
4566 浏览
提问于 2025-04-17 05:38

我在我的析构函数里尝试删除一个创建的目录:

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方法运行,但我觉得这样做不是个好主意。

;-)

撰写回答