Как вы управляете временным каталогом, чтобы он гарантированно удалялся при закрытии программы?

Я работаю с временным каталогом и хочу убедиться, что он удаляется при закрытии программы (независимо от того, была ли программа выполнена успешно). Я использую tempfile.mkdtempдля создания каталога и помещаю созданную строку в подкласс str, который удаляет каталог с помощью команды __del__:

import shutil
import tempfile

class TempDir(str):
    """ container for temporary directory. 
    Deletes directory when garbage collected/zero references """
    def __del__(self):
        shutil.rmtree(self.__str__(), onerror=my_error_fn)

dbdir = TempDir(tempfile.mkdtemp())

Вот в чем я не уверен: если программа закроется или произойдет прерывание клавиатуры, будет ли Python автоматически удалять/собирать мусор все переменные? Если нет, как я могу убедиться, что каталог будет удален?

Связанная информация о создании методов деструктора в Python. Похоже, пока объект TempDir не ссылается ни на что другое, использование __del__для его уничтожения должно быть в порядке.

10
задан Jeff Tratner 10 June 2012 в 00:51
поделиться