¿Cómo eliminar el directorio attrib de solo lectura con Python en Windows?



Answers

No probado, pero sería, algo así como habilitar el acceso de escritura.

import os, stat

os.chmod(ur"file_path_name", stat.S_IWRITE)

Es posible que deba combinar con os.walk para hacer que todo escriba habilitado. algo como

for root, dirs, files in os.walk(ur'root_dir'):
    for fname in files:
        full_path = os.path.join(root, fname)
        os.chmod(full_path ,stat.S_IWRITE)
Question

Tengo un directorio de solo lectura copiado del directorio de versión controlada que está bloqueado.

Cuando intenté eliminar este directorio con el shutil.rmtree(TEST_OBJECTS_DIR) , recibí el siguiente mensaje de error.

WindowsError: [Error 5] Access is denied: 'C:\...\environment.txt'
  • P: ¿Cómo puedo cambiar el atributo de todo en una estructura de directorio completa ?



La respuesta aceptada es casi correcta, pero podría fallar en el caso de un subdirectorio de solo lectura.

La función se da como argumento para el controlador onerror .

Yo sugeriría:

import os, shutil, stat

def remove_readonly(fn, path, excinfo):
    try:
        os.chmod(path, stat.S_IWRITE)
        fn(path)
    except Exception as exc:
        print "Skipped:", path, "because:\n", exc

shutil.rmtree(TEST_OBJECTS_DIR, onerror=remove_readonly)

En caso de que la función vuelva a fallar, puede ver el motivo y continuar eliminando.




Links