¿Qué usuario ejecutan los scripts de Python como en Windows?

Estoy intentando que Python elimine algunos directorios y obtengo errores de acceso en ellos. Creo que es que la cuenta de usuario de Python no tiene derechos?

WindowsError: [Error 5] Access is denied: 'path' 

Es lo que obtengo cuando ejecuto el script.
He intentado

 shutil.rmtree os.remove os.rmdir 

Todos ellos devuelven el mismo error.

Hemos tenido problemas para eliminar archivos y directorios en Windows, incluso si los hubiéramos copiado, si estaban configurados en “solo lectura”. shutil.rmtree() ofrece una especie de manejadores de excepciones para manejar esta situación. Usted lo llama y proporciona un controlador de excepción como este:

 import errno, os, stat, shutil def handleRemoveReadonly(func, path, exc): excvalue = exc[1] if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES: os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777 func(path) else: raise shutil.rmtree(filename, ignore_errors=False, onerror=handleRemoveReadonly) 

Es posible que desee probar eso.

Nunca he usado Python, pero supongo que se ejecuta como cualquier usuario que ejecute el script.

Los scripts no tienen un usuario especial, solo se ejecutan bajo el usuario que ha iniciado sesión y que ejecutó el script.

¿Has intentado comprobar que:

  • ¿Estás intentando eliminar una ruta válida? y eso
  • ¿La ruta no tiene archivos bloqueados?

Si el script se ejecuta como una tarea progtwigda (lo que parece probable para un script de limpieza), probablemente se ejecutará como SISTEMA. Es (imprudente, pero) posible establecer permisos en directorios para que SYSTEM no tenga acceso.

¿Están vacíos los directorios y, de no ser así, esos métodos admiten la eliminación de forma decursiva del contenido de un directorio?

¿Cómo estás ejecutando el script? ¿Desde una sesión de consola interactiva? Si es así, simplemente abra una ventana de comando de DOS (usando cmd) y escriba ‘whoami’. Eso es lo que está ejecutando los scripts de forma interactiva.

Ok, acabo de ver sus ediciones … ¿por qué no imprime la ruta y comprueba las propiedades para ver si la cuenta de usuario que ejecuta los scripts tiene los privilegios necesarios?

Si whoami no funciona en su versión de Windows, puede usar las variables de entorno como SET USERNAME y SET DOMAINNAME desde la ventana de comandos.

@ThomasH: otro ladrillo a la pared.

En los sistemas UNIX, debe asegurarse de que el directorio padre también se pueda escribir. Aquí hay otra versión:

 def remove_readonly(func, path, exc): excvalue = exc[1] if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES: # ensure parent directory is writeable too pardir = os.path.abspath(os.path.join(path, os.path.pardir)) if not os.access(pardir, os.W_OK): os.chmod(pardir, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777 func(path) else: raise 

¡Una solución simple después de buscar horas es verificar primero si esa carpeta existe realmente!

 GIT_DIR="C:/Users/...." if os.path.exists(GIT_DIR): shutil.rmtree(GIT_DIR) 

Esto hizo el truco para mí.