Python 创建文件后,能否更改NamedTemporaryFile的删除标志?

Python 创建文件后,能否更改NamedTemporaryFile的删除标志?,python,temporary-files,Python,Temporary Files,创建NamedTemporaryFile后,如何更改该文件的删除标志 为什么??虽然大多数时候我不需要保留临时文件,但如果我从代码中检测到错误,我希望保留它们以便能够对其进行分析。根据源代码,delete只是存储为NamedTemporaryFile返回的对象的一个属性,因此,您可以在关闭它之前修改任意多的内容 f = NamedTemporaryFile() # stuff f.delete = False f.close() 编辑:这对于Python2是正确的;对于Python3,请参见

创建NamedTemporaryFile后,如何更改该文件的删除标志


为什么??虽然大多数时候我不需要保留临时文件,但如果我从代码中检测到错误,我希望保留它们以便能够对其进行分析。

根据源代码,delete只是存储为
NamedTemporaryFile
返回的对象的一个属性,因此,您可以在关闭它之前修改任意多的内容

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


编辑:这对于Python2是正确的;对于Python3,请参见Augusto Men的答案。

对于现在搜索这个问题的任何人,至少对于Python3+,在实例化
NamedTemporaryFile
后更改
delete
不会更改其初始行为,因为实际的标志存储在名为
\u closer
的对象中(这是一个
\u TemporaryFileCloser
实例)。请参阅Python中的
tempfile.py
,因为该实例中没有提到任何内容

因此,您可以更改此未记录的属性:

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)
创建文件,然后如果不再需要该文件,则手动删除该文件。

您尝试过吗?这似乎对我有用。