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