Для тех, кто сейчас гуглит этот вопрос, по крайней мере, для Python 3+, изменение delete
после создания экземпляра NamedTemporaryFile
не меняет его начальное поведение, поскольку фактический флаг хранится в объекте с именем _closer
(_TemporaryFileCloser
экземпляр).См. tempfile.py
в Python, поскольку официальные документы 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)
, а затем удаляете файл вручную, если он вам больше не нужен.