程序退出时如何删除文件?

时间:2014-01-21 12:10:33

标签: python python-2.7

有没有办法注册文件,以便在Python退出时删除它,无论它如何退出?我正在使用长期存在的临时文件,并希望确保它们得到清理。

该文件必须具有文件名,并且应尽快关闭其原始句柄 - 将创建数千个这样的文件,并且我需要确保它们仅作为普通文件存在。

2 个答案:

答案 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

感兴趣