script programa otro ejecutar desde cómo consola compilar archivos archivo python windows file-permissions

programa - ejecutar python desde cmd windows



¿Qué usuario ejecutan los scripts Python como en Windows? (7)

Estoy intentando que python elimine algunos directorios y obtengo errores de acceso sobre 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 devuelven el mismo error.


¿Cómo estás ejecutando el script? Desde una sesión de consola interactiva? Si es así, solo abre una ventana de comandos de DOS (usando cmd) y escribe ''whoami''. Esa es la persona a la que está ejecutando los scripts de manera interactiva.

Ok, vi tus ediciones justo ahora ... ¿por qué no imprimes la ruta y verificas 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 variables de entorno como SET USERNAME y SET DOMAINNAME desde la ventana de comandos.


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


@ThomasH: otro ladrillo a la pared.

En los sistemas Unix, debe asegurarse de que el directorio principal 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


Hemos tenido problemas para eliminar archivos y directorios en Windows, incluso si los hubiéramos copiado, si se hubieran configurado como ''solo lectura''. shutil.rmtree() ofrece una especie de manejador de excepciones para manejar esta situación. Usted lo llama y proporciona un manejador de excepciones 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.


Los scripts no tienen un usuario especial, solo se ejecutan bajo el usuario actualmente conectado que ejecutó el script.

¿Has intentado verificar eso?

  • Estás tratando de eliminar una ruta válida? y eso
  • la ruta no tiene archivos bloqueados?

Nunca utilicé Python, pero supongo que se ejecuta como cualquier usuario que ejecute el script.


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