能否在创建后更改NamedTemporaryFile的删除标志?

4 投票
2 回答
712 浏览
提问于 2025-04-17 06:27

我该如何在创建了一个命名临时文件后,改变它的删除标志?

为什么呢?因为大多数时候我不需要保留临时文件,但如果我在代码中发现了错误,我想保留这些文件,以便能够进行分析。

2 个回答

2

根据源代码,删除操作其实只是被存储为NamedTemporaryFile返回的对象的一个属性,所以在你关闭它之前,可以随意修改这个对象。

f = NamedTemporaryFile()
# stuff
f.delete = False
f.close()

补充说明:这适用于Python 2;如果是Python 3,可以参考Augusto Men的回答。

6

对于现在在网上搜索这个问题的人来说,特别是使用Python 3及以上版本的朋友,想要知道在创建了NamedTemporaryFile之后修改delete这个参数并不会改变它最初的行为。因为实际的设置是存储在一个叫_closer的对象里(这个对象是_TemporaryFileCloser的实例)。在Python的tempfile.py文件中可以看到这一点,而官方的Python文档里并没有提到这点。

所以你有两个选择:要么修改这个没有文档说明的属性:

f = tempfile.NamedTemporaryFile(delete=True)
# f.delete = False  # This doesn't change anything
f._closer.delete = False  # undocumented
f.close()  # the file won't be deleted

要么在创建文件时总是使用NamedTemporaryFile(delete=False),如果你不再需要这个文件,就手动删除它。

撰写回答