我正在处理一个临时目录,我想确保它在程序关闭时被删除(无论程序是否成功)。我使用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