Я экспериментировал с открытием текстовых редакторов из своего скрипта Python и заметил нечто, что явно противоречит моему пониманию документации tempfile.
Мой эксперимент начался с ответа Алекса Мартелли.
Мой код -
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
, однако даже тогда я могу записывать и читать его содержимое. Я не понимаю, почему это происходит. Согласно документам-
Если для удаления установлено значение 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)))
nano
, который снова создает ваш временный файл. - person DYZ   schedule 11.11.2018