能否在创建后更改NamedTemporaryFile的删除标志?
我该如何在创建了一个命名临时文件后,改变它的删除标志?
为什么呢?因为大多数时候我不需要保留临时文件,但如果我在代码中发现了错误,我想保留这些文件,以便能够进行分析。
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)
,如果你不再需要这个文件,就手动删除它。