¿Cómo puedo obtener la máscara de permiso de un archivo como 644 o 755 en * nix usando Python? ¿Hay alguna función o clase para hacer eso? ¿Podrían ayudarme? ¡Muchas gracias!¿Cómo puedo obtener la máscara de permiso de un archivo?
Respuesta
Hay un montón de funciones basadas en archivos dentro del módulo os estoy seguro. Si ejecuta os.stat(filename)
, siempre puede interpelar los resultados.
os.stat es análoga a la estadística c-lib (hombre 2 stat en Linux Para ver la información)
stats = os.stat('file.txt')
print stats.st_mode
Otra manera de hacerlo si no quiere trabajar en lo stat medios es utilizar el comando os.access http://docs.python.org/library/os.html#os.access Pero lea la documentación sobre posibles problemas de seguridad
Por ejemplo, para comprobar los permisos en el archivo t est.dat que ha de lectura/permisos de escritura
os.access("test.dat",os.R_OK)
>>> True
#Execute permissions
os.access("test.dat",os.X_OK)
>>> False
#And Combinations thereof
os.access("test.dat",os.R_OK or os.X_OK)
>>> True
os.access("test.dat",os.R_OK and os.X_OK)
>>> False
OCT (os.stat ('file') st_mode.) [4:]
os.stat
es una envoltura alrededor de la interfaz de llamada stat(2) sistema.
>>> import os
>>> from stat import *
>>> os.stat("test.txt") # returns 10-tupel, you really want the 0th element ...
posix.stat_result(st_mode=33188, st_ino=57197013, \
st_dev=234881026L, st_nlink=1, st_uid=501, st_gid=20, st_size=0, \
st_atime=1300354697, st_mtime=1300354697, st_ctime=1300354697)
>>> os.stat("test.txt")[ST_MODE] # this is an int, but we like octal ...
33188
>>> oct(os.stat("test.txt")[ST_MODE])
'0100644'
Aquí reconocerá los permisos octal típicos.
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission
usted está realmente interesado sólo en las inferiores bits de, por lo que podría cortar el resto:
>>> oct(os.stat("test.txt")[ST_MODE])[-3:]
'644'
>>> # or better
>>> oct(os.stat("test.txt").st_mode & 0o777)
Nota al margen: las partes superiores determinan el tipo de archivo, por ejemplo:
S_IFMT 0170000 bitmask for the file type bitfields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory
S_IFCHR 0020000 character device
S_IFIFO 0010000 FIFO
S_ISUID 0004000 set UID bit
S_ISGID 0002000 set-group-ID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
excelente respuesta, ¡muchas gracias! – davidx
+1 porque miré a continuación. – SingleNegationElimination
En general me gusta esta respuesta, pero el enmascaramiento de bits parece más limpio que el corte de cadenas: '' oct (os.stat ("test.txt").st_mode & 0777) '' – ncoghlan
Creo que esta es la manera más clara de obtener un archivo de la permi bits de fisión:
stat.S_IMODE(os.lstat("file").st_mode)
La función os.lstat, estarán en caso de que el archivo es un enlace simbólico, le dan la modalidad del mismo enlace, mientras que os.stat desreferencias el enlace. Por lo tanto, me parece que os.lstat es el más útil en general.
He aquí un caso de ejemplo, un archivo regular dada "testfile" y enlace a la última, "testlink":
import stat
import os
print oct(stat.S_IMODE(os.lstat("testlink").st_mode))
print oct(stat.S_IMODE(os.stat("testlink").st_mode))
Este script muestra la siguiente información para mí:
0777
0666
gracias para señalar la diferencia de 'stat' y' lstat'. – devsnd
@devsnd Me alegro de ser de ayuda. – aknuds1
Tenga en cuenta que en [Python 3] (https://www.python.org/download/releases/3.0/) hay [nueva sintaxis para octals] (https://docs.python.org/dev/whatsnew/3.0 .html # integers), [así] (https://stackoverflow.com/a/36386530/1321680) el resultado del ejemplo anterior es: '0o777' y' 0o666' en lugar de '0777' y' 0666'. –
- 1. crear una máscara de bit de permiso en Java
- 2. ¿Puedo obtener el permiso de root sin dejar vim?
- 3. ¿Cómo obtener permiso para editar el archivo apache2.conf? [Ubuntu]
- 4. ¿Cómo puedo obtener la arquitectura de un archivo '.a'?
- 5. ¿Cómo puedo obtener la fuente de un archivo javascript modificado?
- 6. cygwin establece permiso de archivo para 000
- 7. ¿Cómo obtener una lista de archivos que coincidan con una máscara de archivo (comodín) en Clojure?
- 8. ¿Cómo puedo obtener un CGImageRef de un archivo?
- 9. ¿Cómo funciona la máscara de aumento automático?
- 10. obtener permiso de Android dynamiclly
- 11. ¿Cómo puedo fácilmente (en java) generar nombres de archivo a partir de una cadena de máscara?
- 12. ¿cómo puedo obtener el ícono de archivo?
- 13. ¿Cómo puedo obtener las capas de un archivo PSD?
- 14. ¿Cómo puedo obtener todas las imágenes de un archivo qrc?
- 15. PHP: ¿cómo puedo obtener la fecha de creación del archivo?
- 16. Nant: cambio de permiso de archivo
- 17. Mostrar el permiso de un archivo indexado en git
- 18. Jenkins: Permiso denegado a un archivo 777
- 19. Permiso de archivo predeterminado de Linux
- 20. Cómo obtener un archivo Makefile de qmake
- 21. Búsqueda por máscara de bits en ActiveRecord
- 22. Cómo establecer un archivo para este permiso drwxrwsrwx en ubuntu
- 23. ¿Puedo obtener la fecha cuando se modificó un archivo HTTP?
- 24. cómo puedo desenmascarar C# contraseña de texto y la máscara de nuevo a la contraseña
- 25. ¿Cómo puedo obtener un archivo sin eliminarlo del disco?
- 26. ¿Cómo obtener la ubicación (src) de un archivo javascript?
- 27. Carácter opcional en la máscara de entrada
- 28. ¿cómo puedo obtener la cantidad de fotogramas por segundo de un archivo gif?
- 29. Carrierwave cómo obtener la extensión de archivo
- 30. Android: ¿Cómo obtener la fecha de creación de un archivo?
posible duplicado de [ Verificación de permisos de archivos en Linux con Python] (http://stackoverflow.com/questions/1861836/checking-file-permissions-in-linux-with-python) –
¡Gracias a todos, realmente me ayudan! – davidx