2011-11-04 55 views
0

我尝试在我的析构函数删除创建的目录:shutil.rmtree(......)并不在我的脚本工作

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

它不与我的Python脚本工作,但是当我通过执行此命令python控制台它的工作和tmp目录将被删除。

差异在哪里?

+1

“不起作用”是什么意思?你得到一个错误?你没有错误,没有被删除? –

+0

假设问题是__del__方法未被调用,我的答案应该有所帮助。否则,你应该发布你的代码的相关部分。 – stderr

回答

3

我认为“析构函数”的意思是__del__方法。

the docs on 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(),这可能会迫使你德尔方法来运行,但我要在这里走出去的肢体,并说这是一个坏的想法

;-)