2011-11-04 58 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(),這可能會迫使你德爾方法來運行,但我要在這裏走出去的肢體,並說這是一個壞的想法

;-)