read open how from files filename all python windows permissions directory

open - Python-Probar los permisos del directorio



python read file from directory (3)

Si bien os.access hace todo lo posible para saber si una ruta es accesible o no, no pretende ser perfecta. De los documentos de Python:

Nota: Las operaciones de E / S pueden fallar incluso cuando access () indica que tendrían éxito, en particular para operaciones en sistemas de archivos de red que pueden tener semántica de permisos más allá del modelo habitual de bit de permiso POSIX.

La forma recomendada de averiguar si el usuario tiene acceso para hacer lo que sea es intentar hacerlo, y detectar las excepciones que se produzcan.

En Python en Windows, ¿hay alguna manera de determinar si un usuario tiene permiso para acceder a un directorio? He echado un vistazo a os.access pero da resultados falsos.

>>> os.access(''C:/haveaccess'', os.R_OK) False >>> os.access(r''C:/haveaccess'', os.R_OK) True >>> os.access(''C:/donthaveaccess'', os.R_OK) False >>> os.access(r''C:/donthaveaccess'', os.R_OK) True

¿Estoy haciendo algo mal? ¿Hay una mejor manera de verificar si un usuario tiene permiso para acceder a un directorio?


En realidad, ''C: / haveaccess'' es diferente de r''C: / haveaccess ''. Desde el punto de vista de Python, ''C: / haveaccess'' no es una ruta válida, por lo tanto, use ''C: // haveaccess'' en su lugar. Creo que os.access funciona bien.


Puede ser complicado verificar los permisos en Windows (¡tenga cuidado con los problemas en Vista con UAC, por ejemplo! - vea esta pregunta relacionada ).

¿Estás hablando de un simple acceso de lectura, es decir, de leer los contenidos del directorio? La manera más segura de probar los permisos sería tratar de acceder al directorio (por ejemplo, hacer un os.listdir ) y atrapar la excepción.

Además, para que las rutas se interpreten correctamente, debe usar cadenas sin formato o escapar de las barras diagonales inversas (''//'), o usar barras diagonales en su lugar.

(EDITAR: puedes evitar barras por completo usando os.path.join - la forma recomendada de construir rutas)