Module Python os.chmod(fichier, 664) ne change pas la permission d'rw-rw-r— mais -w--wx----
Récemment, je suis à l'aide de Python module os, quand j'ai essayé de modifier les autorisations d'un fichier, je n'ai pas eu le résultat escompté. Par exemple, j'ai l'intention de changer la permission d'rw-rw-r--,
os.chmod("/tmp/test_file", 664)
La propriété de l'autorisation est en fait -w--wx--- (230)
--w--wx--- 1 ag ag 0 Mar 25 05:45 test_file
Cependant, si je change de 664 à 0664 dans le code, le résultat est juste ce dont j'ai besoin, par exemple
os.chmod("/tmp/test_file", 0664)
Le résultat est:
-rw-rw-r-- 1 ag ag 0 Mar 25 05:55 test_file
Quelqu'un pourrait-il aider à expliquer pourquoi le fait que 0 est donc important d'obtenir le résultat correct?
- Octal. Octal. Octal.
- Drapeau pour Unix..
- J'ai ouvert un problème pour la documentation python bugs.python.org/issue25377 parce que cela devrait être clair à partir de la documentation.
InformationsquelleAutor AplusG | 2013-03-25
Vous devez vous connecter pour publier un commentaire.
Trouvé ceci sur un les différents forum
Ce que vous faites est de passage
664
qui en octal est1230
Dans votre cas, vous avez besoin
[Mise à jour] il est à Noter, pour Python 3 vous avez préfixe 0 (zéro oh). E. G,
0o666
1
est pas jetés! C'est le collant/setuid/setgid bit, et 1 signifiesticky
. À l'aide dels -l
vous remarquerez peut-être des autorisations incluent désormais unT
en fin de compte...Donc pour les personnes qui veulent sémantique similaire à:
En python 2:
En python 3:
"0" signifie que ce est octal constante, pas de décimal. et vous avez besoin d'une octal pour changer de mode de fichier.
autorisations sont un masque de bits, par exemple, rwxrwx--- est 111111000 en binaire, et il est très facile de groupe de bits par 3 à convertir en octal, de calculer la représentation décimale.
0644 (octal) est 0.110.100.100 en binaire (j'ai ajouté des points pour des raisons de lisibilité), ou, comme vous pouvez le calculer, 420 en décimal.
Utilisation de l'autorisation des symboles à la place des numéros de
Votre problème aurait pu être évitée si l'on avait utilisé le nom de la permission des symboles plutôt que des raw des numéros de magie, par exemple pour
664
:C'est documentée à https://docs.python.org/3/library/os.html#os.chmod et les noms sont les mêmes que les C API POSIX valeurs documentées à
man 2 stat
.Un autre avantage est la plus grande portabilité comme indiqué dans les docs:
chmod +x
est démontrée à: Comment voulez-vous faire un simple "chmod +x" à l'intérieur de python?Testé sur Ubuntu, 16.04, Python 3.5.2.