3

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

shutil.rmtree("C:\\projects\\project_alpha\\tmp")

它不适用于我的 python 脚本,但是当我通过 python 控制台执行此命令时,它可以工作并且 tmp 目录将被删除。

区别在哪里?

4

1 回答 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方法运行,但我要在这里冒险并说这是一个坏主意。

;-)

于 2011-11-04T14:15:00.400 回答