El módulo de Python os.chmod(archivo, 664) no cambia el permiso a rw-rw-r- pero-w-wx----
file permissions (3)
Encontrado esto en un foro diferente
Si se pregunta por qué ese cero inicial es importante, es porque los permisos se establecen como un entero octal, y Python trata automágicamente cualquier entero con un cero inicial como octal. Así que os.chmod ("archivo", 484) (en decimal) daría el mismo resultado.
Lo que estás haciendo es pasar 664
que en octal es 1230
En tu caso necesitarías
os.chmod("/tmp/test_file", 436)
[Actualización] Nota, para Python 3 tienes prefijo con 0o (cero oh). EG, 0o666
Recientemente estoy usando el sistema operativo Python, cuando intenté cambiar el permiso de un archivo, no obtuve el resultado esperado. Por ejemplo, tenía la intención de cambiar el permiso a rw-rw-r--,
os.chmod("/tmp/test_file", 664)
El permiso de propiedad es en realidad -w - wx --- (230)
--w--wx--- 1 ag ag 0 Mar 25 05:45 test_file
Sin embargo, si cambio 664 a 0664 en el código, el resultado es justo lo que necesito, por ejemplo
os.chmod("/tmp/test_file", 0664)
El resultado es:
-rw-rw-r-- 1 ag ag 0 Mar 25 05:55 test_file
¿Alguien podría ayudar a explicar por qué ese 0 como líder es tan importante para obtener el resultado correcto?
Entonces para las personas que quieren semántica similar a:
$ chmod 755 somefile
En python 2:
$ python -c "import os; os.chmod(''somefile'', 0755)"
En python 3:
$ python3 -c "import os; os.chmod(''somefile'', 0o755)"
el "0" inicial significa que es constante octal, no decimal. y necesitas un octal para cambiar el modo de archivo.
los permisos son una máscara de bit, por ejemplo, rwxrwx --- es 111111000 en binario, y es muy fácil agrupar bits por 3 para convertirlos a octal, que calcular la representación decimal.
0644 (octal) es 0.110.100.100 en binario (he agregado puntos para legibilidad), o, como puede calcular, 420 en decimal.