с открытым (...) не закрывает мой файл, когда выполнение выходит из блока - PullRequest
0 голосов
/ 30 апреля 2018

Мне было интересно, почему я получаю ошибку:

[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, файл автоматически закрывается. Так что вызывает открытие файла?

...