Есть ли простой способ использовать временный файл Python на полке (и убедиться, что он очищается)?

StackOverflow https://stackoverflow.com/questions/1298037

  •  18-09-2019
  •  | 
  •  

Вопрос

По сути, мне нужен бесконечный размер (точнее, жесткий диск, а не память) в программе Python, которую я пишу.Кажется, что модули tempfile и shelve естественным образом подходят для этого, однако я не вижу, как безопасно использовать их вместе.Я хочу, чтобы временный файл удалялся при сборке полки (или при гарантированном удалении после того, как полка не используется, независимо от того, когда), но единственное решение, которое я могу придумать для этого, включает использование tempfile.TemporaryFile() для открытия дескриптор файла, получение имени файла из дескриптора, использование этого имени файла для открытия полки, сохранение ссылки на дескриптор файла, чтобы предотвратить его сборку (и удаление файла), а затем размещение оболочки на полке, которая хранит это ссылка.У кого-нибудь есть лучшее решение, чем этот запутанный беспорядок?

Ограничения:Можно использовать только стандартную библиотеку Python и он должен быть полностью кроссплатформенным.

Это было полезно?

Решение

Я бы предпочел унаследовать от shelve.Shelf и переопределить метод закрытия (*), чтобы разорвать связь между файлами.Обратите внимание, что в зависимости от конкретного используемого модуля dbm у вас может быть более одного файла, содержащего полку.Одним из решений может быть создание временного каталога, а не временного файла, и по завершении удаления всего содержимого каталога.Другим решением было бы привязаться к конкретному модулю dbm (скажем, bsddb или dumpdbm) и удалить конкретно те файлы, которые создают эти библиотеки.

(*) обратите внимание, что метод close полки также вызывается, когда на полке собирается мусор.Единственный случай, когда вы можете получить мусорные файлы, — это сбой или завершение работы интерпретатора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top