我尝试在我的析构函数中删除创建的目录:
shutil.rmtree("C:\\projects\\project_alpha\\tmp")
它不适用于我的 python 脚本,但是当我通过 python 控制台执行此命令时,它可以工作并且 tmp 目录将被删除。
区别在哪里?
我假设“析构函数”是指__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方法运行,但我要在这里冒险并说这是一个坏主意。
;-)