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

edA*_*a-y 5 python python-2.7

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

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

Mar*_*ers 12

使用tempfile模块 ; 它创建自动删除的临时文件.

tempfile.NamedTemporaryFile()文档:

如果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))
Run Code Online (Sandbox Code Playgroud)

并将其用作:

with tempdir() as base_dir:
    # main program storing new files in base_dir

# directory cleaned up here
Run Code Online (Sandbox Code Playgroud)

可以使用atexit钩子函数执行此操作,但上下文管理器是一种清晰的方法.