import shutil shutil.rmtree(path, ignore_errors=False, onerror=None, *, onexc=None, dir_fd=None)
path
- каталог удаления, ignore_errors
- игнорирование ошибок во время удаления,onerror=None
- обработчик ошибок, возникающих в процессе удаления (будет удален в Python 3.14.),onexc=None
- обработчик ошибок, возникающих в процессе удаления (добавлено в Python 3.12),dir_fd=None
- необязательный дескриптор (добавлен в Python 3.11).Функция rmtree()
модуля shutil
рекурсивно удаляет все дерево каталогов. Путь path
должен указывать на каталог, но не символическую ссылку на каталог.
Если значение ignore_errors равно true, ошибки, возникающие в результате неудачного удаления, будут проигнорированы; если значение false или опущено, такие ошибки обрабатываются путем вызова обработчика, указанного onexc или onerror, или, если оба опущены, исключения передаются вызывающей стороне.
Если ignore_errors=True
, то возникшие ошибки в результате неудачного удаления, будут игнорироваться. Если False
или пропущено, такие ошибки обрабатываются путем вызова обработчика, указанного в аргументах onexc
ИЛИ onerror
, или, если оба опущены, исключения передаются вызывающей стороне.
Аргумент
onerror
устарел и будет удален в Python 3.14.
Если указан onerror
, это должен быть вызываемый объект, который принимает три аргумента: function
, path
и excinfo
.
Первый аргумент function
(у вызываемого объекта) является функцией, которая вызвала исключение. Это зависит от платформы и реализации. Второй параметр, path
будет именем пути, переданным функции. Третий параметр excinfo
будет информацией об исключении, возвращаемой sys.exc_info()
. Исключения, вызванные ошибкой, обнаруживаться не будут.
Изменено в Python 3.12: Добавлен необязательный ключевой аргумент
onexc
, который является обработчиком ошибок, подобнымonerror
, но который ожидает экземпляр исключения, а не тройной кортеж(typ, val, tb)
.
Если указан onexc
, это должен быть вызываемый объект, который принимает экземпляр исключения - три аргумента: function
, path
и excinfo
.
Изменено в Python 3.11: Добавлен необязательный ключевой аргумент
dir_fd
.
Эта функция может поддерживать пути относительно дескрипторов каталогов dir_fd
.
Примечание: На платформах, поддерживающих необходимые функции на основе файлового дескриптора
fd
, по умолчанию используется стойкая к атакам на символические ссылки функцияshutil.rmtree()
. На других платформах реализацияshutil.rmtree()
восприимчива к атаке по символическим ссылкам: при надлежащем времени и обстоятельствах злоумышленники могут манипулировать символическими ссылками в файловой системе, чтобы удалить файлы, к которым они не могут получить доступ. Приложения могут использовать атрибут функцииrmtree.avoids_symlink_attacks
, чтобы определить, какой случай применим.
Вызывает событие аудита shutil.rmtree
с аргументами path
, dir_fd
.
rmtree.avoids_symlink_attacks
:Атрибут функции rmtree.avoids_symlink_attacks
указывает, предоставляет ли текущая платформа и реализация версию rmtree()
, устойчивую к атакам по символическим ссылкам. В настоящее время это верно только для платформ, поддерживающих функции доступа к каталогам на основе файлового дескриптора fd
.
>>> import shutil >>> shutil.rmtree.avoids_symlink_attacks # True
shutil.rmtree()
.В этом примере показано, как удалить дерево каталогов в Windows, где для некоторых файлов установлен бит только для чтения. Он использует обратный вызов onerror
, чтобы очистить бит readonly
и повторить попытку удаления.
import os, stat import shutil def remove_readonly(func, path, _): "Clear the readonly bit and reattempt the removal" os.chmod(path, stat.S_IWRITE) func(path) shutil.rmtree(directory, onerror=remove_readonly)