Shutil.rmtree для удаления файлов readonly
Я хочу использовать shutil.rmtree
в Python для удаления каталога. В рассматриваемой директории находится каталог управления .git
, который git отмечает как доступный только для чтения и скрытый.
Флаг только для чтения вызывает отказ rmtree
. В Powershell я бы сделал "del -force", чтобы принудительно удалить флаг только для чтения. Есть ли эквивалент в Python? Я бы предпочел не ходить по всему дереву дважды, но аргумент onerror
для rmtree, похоже, не повторяет операцию, поэтому я не могу использовать
def set_rw(operation, name, exc):
os.chmod(name, stat.S_IWRITE)
shutil.rmtree('path', onerror=set_rw)
Ответы
Ответ 1
После более подробного исследования будет работать следующее:
def del_rw(action, name, exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
shutil.rmtree(path, onerror=del_rw)
Другими словами, фактически удалите файл в функции onerror. (Возможно, вам нужно будет проверить каталог в обработчике onerror и использовать rmdir в этом случае - мне это не нужно, но это может быть только что-то конкретное в моей проблеме.