有没有办法注册文件,以便在Python退出时删除它,无论它如何退出?我正在使用长期存在的临时文件,并希望确保它们得到清理。
该文件必须具有文件名,并且应尽快关闭其原始句柄 - 将创建数千个这样的文件,并且我需要确保它们仅作为普通文件存在。
答案 0 :(得分:11)
使用tempfile
module;它会创建自动删除的临时文件。
来自tempfile.NamedTemporaryFile()
documentation:
如果 delete 为true(默认值),则文件一关闭就会被删除。
您可以使用这样的文件对象作为上下文管理器,以便在代码块退出时自动关闭它,或者在解释器退出时让它关闭。
另一种方法是使用tempdir.mkdtemp()
创建一个专用的临时目录,并在程序完成时使用shutil.rmtree()
删除整个目录。
最好使用另一个上下文管理器执行后者:
import shutil
import sys
import tempfile
from contextlib import contextmanager
@contextmanager
def tempdir():
path = tempfile.mkdtemp()
try:
yield path
finally:
try:
shutil.rmtree(path)
except IOError:
sys.stderr.write('Failed to clean up temp dir {}'.format(path))
并将其用作:
with tempdir() as base_dir:
# main program storing new files in base_dir
# directory cleaned up here
可以使用atexit
hook function执行此操作,但上下文管理器是一种多清洁方法。
答案 1 :(得分:1)
您可能能够使用atexit library,但是当检测到Python致命内部错误时,当程序被Python未处理的信号杀死时,不会捕获通过此模块注册的函数,或者在调用os._exit()时。但我不认为纯python中的任何东西都可以处理这些情况。
您可能也对this question
感兴趣