如果脚本可能被中断,清理临时文件的最佳方法

2024-03-29 14:48:14 发布

您现在位置:Python中文网/ 问答频道 /正文

命令行脚本需要在存在之前清除它为使用而创建的临时文件。假设脚本在执行期间也可以被中断。 你应该在脚本中做以下哪一项?在

a:)使用atexit模块

b:)使用os.tempnam公司()以创建临时文件

c:)定义一个函数

d:)以上都不是


Tags: 模块函数命令行脚本定义os公司atexit
3条回答

使用try/finally来做clean-up。如果需要处理操作系统级中断,请使用signals。在

Try/finally示例

try:
    create_temp_file()
finally:
    delete_temp_file()

信号示例

^{pr2}$

您可以在此处定义自己的上下文管理器:

import os
class create_temp_file(object):
    def __enter__(self):
        """Define entry point actions here"""

        self.filename = os.tempnam()
        self.file_obj = open(self.filename, 'w')
        return self.file_obj

    def __exit__(self, ex_type, ex_value, ex_traceback):
        """define cleanup actions here"""

        self.file_obj.close()
        os.remove(self.filename)

现在使用with语句,这是python做try finally的方式

^{pr2}$

但是os.tempnam不安全,最好使用tempfile模块来做这些事情。在

RuntimeWarning: tempnam is a potential security risk to your program

^{3}$

如果delete为true(默认值),则文件一关闭即被删除(或当文件对象被垃圾回收时)

您可以用try/finally子句包装所有内容。清理部分位于finally下:

try:
    # do everything
finally:
    # cleanup logic

中断程序时,会引发SystemExit异常,并执行finally子句。 它允许做更多的事情,而不仅仅是删除临时文件。在

相关问题 更多 >