Если вы используете shutil.rmtree, вы можете использовать член onerror этой функции, чтобы предоставить функцию, которая принимает три параметра: function, path и info исключений. Вы можете использовать этот метод, чтобы пометить файлы только для чтения как доступные для записи при удалении дерева.
import os, shutil, stat
def on_rm_error( func, path, exc_info):
# path contains the path of the file that couldn't be removed
# let's just assume that it's read-only and unlink it.
os.chmod( path, stat.S_IWRITE )
os.unlink( path )
shutil.rmtree( TEST_OBJECTS_DIR, onerror = on_rm_error )
Теперь, если честно, функцию ошибки можно вызывать по разным причинам. Параметр 'func' может сказать вам, какая функция "провалилась" (os.rmdir () или os.remove ()). То, что вы здесь делаете, зависит от того, насколько пуленепробиваемым вы хотите, чтобы ваше дерево было. Если вам действительно нужно пометить файлы как доступные для записи, вы можете сделать то, что я делал выше. Если вы хотите быть более осторожным (т. Е. Определить, не удалось ли удалить каталог, или если при попытке удалить файл произошло нарушение общего доступа к файлу), необходимо вставить соответствующую логику в функцию on_rm_error () .