0
我尝试在我的析构函数删除创建的目录:shutil.rmtree(......)并不在我的脚本工作
shutil.rmtree("C:\\projects\\project_alpha\\tmp")
它不与我的Python脚本工作,但是当我通过执行此命令python控制台它的工作和tmp目录将被删除。
差异在哪里?
我尝试在我的析构函数删除创建的目录:shutil.rmtree(......)并不在我的脚本工作
shutil.rmtree("C:\\projects\\project_alpha\\tmp")
它不与我的Python脚本工作,但是当我通过执行此命令python控制台它的工作和tmp目录将被删除。
差异在哪里?
我认为“析构函数”的意思是__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__方法未被调用,我的答案应该有所帮助。否则,你应该发布你的代码的相关部分。 – stderr