Вы можете изменить флаг удаления из NamedTeoraryFile после того, как файл был создан? - PullRequest
3 голосов
/ 16 ноября 2011

Как я могу изменить флаг удаления из NamedTeoraryFile после создания такого файла?

Почему? Хотя в большинстве случаев мне не нужно хранить временные файлы, если я обнаруживаю ошибку внутри кода, я хочу сохранить их, чтобы иметь возможность анализировать их.

Ответы [ 2 ]

3 голосов
/ 22 июля 2016

Для тех, кто сейчас гуглит этот вопрос, по крайней мере, для 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), а затем удаляете файл вручную, если он вам больше не нужен.

2 голосов
/ 16 ноября 2011

Согласно исходному коду, delete просто сохраняется как атрибут объекта, возвращаемого NamedTemporaryFile, так что вы можете изменить столько раз, сколько хотите, прежде чем закрыть его.

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

РЕДАКТИРОВАТЬ: это верно для Python 2; для Python 3 см. ответ Augusto Men.

...