#python #shutil
#python #shutil
Вопрос:
Я пытаюсь удалить созданный каталог в моем деструкторе:
shutil.rmtree("C:\projects\project_alpha\tmp")
Это не работает с моим скриптом на python, но когда я выполняю эту команду через консоль python, она работает, и tmp-каталог будет удален.
В чем разница?
Комментарии:
1. Что означает «не работает»? Вы получаете ошибку? Вы не получаете ошибку и ничего не удаляется?
2. Предполагая, что проблема заключается в том, что метод del не вызывается, мой ответ должен помочь. В противном случае вам следует опубликовать соответствующие части вашего кода.
Ответ №1:
Я предполагаю, что под «деструктором» вы подразумеваете __del__
метод.
Не гарантируется, что методы del() вызываются для объектов, которые все еще существуют при завершении интерпретатора.
Возможно, вам захочется зарегистрировать обработчик atexit.
Например, на уровне модуля:
import atexit
def cleanup_directories():
directories = ["C:\projects\project_alpha\tmp",]
for path in directories:
if os.path.exists(path) and os.path.isdir(path):
shutil.rmtree(path)
atexit.register(cleanup_directories)
Функции, зарегистрированные в atexit, будут запускаться при выходе интерпретатора, независимо от того, как интерпретатор завершает работу.
Конечно, вы также могли бы сделать что-то хакерское, например, принудительно запустить сборщик мусора ( import gc; gc.collect()
, что может заставить ваш метод del работать, но я собираюсь рискнуть и сказать, что это плохая идея.
😉