Я использую tempfile.mkstemp
, когда мне нужно создать файлы в каталоге, который может остаться, но меня не волнует имя файла. Это должно быть только то, чего не существует до сих пор и которое имеет префикс и суффикс.
Одна часть документации, которую я до сих пор игнорировал, это
mkstemp () возвращает кортеж, содержащий дескриптор уровня ОС, в открытый файл (как было бы возвращено функцией os.open ()) и абсолютный путь к этому файлу в указанном порядке.
Что такое ОС ручку высокого уровня и как ее использовать?
Фон
Я всегда использовал это так:
from tempfile import mstemp
_, path = mkstemp(prefix=prefix, suffix=suffix, dir=dir)
with open(path, "w") as f:
f.write(data)
# do something
os.remove(path)
До сих пор все работало нормально. Однако сегодня я написал небольшой скрипт, который генерирует огромные файлы и удаляет их. Скрипт прервал выполнение с сообщением
OSError: [Errno 28] No space left on device
Когда я проверил, было 80 ГБ свободно.
Я подозреваю, что os.remove
только "помечал" файлы для удаления, но файлы не были удалены должным образом. И следующим подозрением было то, что мне может потребоваться закрыть дескриптор уровня ОС, прежде чем ОС действительно сможет освободить это дисковое пространство.