Я экспериментировал с открытием текстовых редакторов из своего скрипта на python и заметил кое-что, что явно противоречит моему пониманию документации tempfile .
Мой эксперимент начался с * 1005 Алекса Мартелли* answer .
Мой код -
import os
import tempfile
import subprocess
f = tempfile.NamedTemporaryFile(mode='w+t', delete=True)
n = f.name
print('Does exist? : {0}'.format(os.path.exists(n)))
f.close()
print('Does exist? : {0}'.format(os.path.exists(n)))
subprocess.run(['nano', n])
with open(n) as f:
print (f.read())
print('Does exist? : {0}'.format(os.path.exists(n)))
ВЫХОД:
Does exist? : True
Does exist? : False
Hello from temp file.
Does exist? : True
В коде я явно вызываю close
для файлового объекта, объявленного с delete=True
Однако даже тогда я могу писать и читать содержимое.Я не понимаю, почему это происходит.В соответствии с документами -
Если delete равно true (по умолчанию), файл удаляется сразу после его закрытия.
Если вызов close
удалит файл, я НЕ ДОЛЖЕН быть в состоянии записать, а затем прочитать его.Но он отображает правильное содержимое файла, который вы вводите при выполнении nano
.И как tempfile , файл не виден в каталоге, где я открыл терминал и запустил скрипт.Что еще более странно, os.path.exists
работает правильно первые два раза и возможно неправильно в третий раз.
Я что-то здесь упускаю?
Дополнительный эксперимент:
Если я запускаю следующий код, то я ясно вижу созданный файл.Но этого не происходит в исходном коде.
n = '.temp'
subprocess.run(['nano', n])
with open(n) as f:
print (f.read())
print('Does exist? : {0}'.format(os.path.exists(n)))