Si está utilizando shutil.rmtree, se puede utilizar el miembro onerror de esa función para proporcionar una función que toma tres parametros: función, camino, y la información de excepción. Puede usar este método para marcar archivos de solo lectura como de escritura mientras está eliminando su árbol.
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)
Ahora, para ser justos, podría llamarse a la función de error por varias razones. El parámetro 'func' puede decirle qué función "falló" (os.rmdir() o os.remove()). Lo que hagas aquí depende de cuán a prueba de balas quieras que sea tu árbol. Si realmente es solo un caso de necesidad de marcar archivos como modificables, podría hacer lo que hice anteriormente. Si quiere tener más cuidado (es decir, determinar si el directorio no puede ser eliminado, o si hubo una violación de compartir en el archivo al intentar eliminarlo), la lógica apropiada debería insertarse en la función on_rm_error() .
¡Genial! Este es un enfoque más dedicado. – YOU