我正在處理一個臨時目錄,我想確保它在程序關閉時被刪除(無論程序是否成功)。我使用tempfile.mkdtemp
創建目錄,並把該刪除其__del__
命令的目錄時創建成str
一個子類的字符串:如何管理臨時目錄以保證在程序關閉時被刪除?
import shutil
import tempfile
class TempDir(str):
""" container for temporary directory.
Deletes directory when garbage collected/zero references """
def __del__(self):
shutil.rmtree(self.__str__(), onerror=my_error_fn)
dbdir = TempDir(tempfile.mkdtemp())
這裏就是我不知道:如果程序關閉或一個KeyboardInterrupt發生了,Python會自動刪除/垃圾收集所有的變量嗎?如果沒有,我如何確保目錄被刪除?
有關creating destructor methods in Python的相關信息。似乎只要TempDir對象沒有引用其他任何東西,使用__del__
來破壞它應該沒問題。
當您測試它時發現了什麼?每次Ctrl + C時是否執行'__del__'? –
好吧,只是添加了我的測試結果 - 非常感謝您的建議@JoelCornett! –
考慮除'__del__'之外還使用'atexit'模塊。 – martineau