Мне было интересно, почему я получаю ошибку:
[WinError32] The process cannot access the file because it is being used by another process
Когда я пишу во временный файл, используя with
:
from pathlib import Path
from tempfile import NamedTemporaryFile
tmp_file = NamedTemporaryFile(delete=False)
tmp_file_name = tmp_file.name
with open(tmp_file_name, "w") as fp:
print("Hello", file=fp)
Path(tmp_file_name).unlink()
Принимая во внимание, что если я вручную закрываю файл, все в порядке:
from pathlib import Path
from tempfile import NamedTemporaryFile
tmp_file = NamedTemporaryFile(delete=False)
tmp_file_name = tmp_file.name
tmp_file.write(b"Hello")
tmp_file.close()
Path(tmp_file_name).unlink()
Хотя это происходит только в ОС Windows, а не в OSX или Linux.
В документах Tempfile говорится:
Возможность использования имени для открытия файла во второй раз, когда именованный временный файл все еще открыт, зависит от платформы (его можно использовать в Unix; в Windows NT или более поздней версии это невозможно).
Хотя я понимаю, что когда выполнение покидает блок with
, файл автоматически закрывается. Так что вызывает открытие файла?