J'essaie de modifier l'autorisation d'accès à un fichier :
os.chmod(path, mode)
Je veux qu'il soit en lecture seule :
os.chmod(path, 0444)
Existe-t-il un autre moyen de rendre un fichier en lecture seule ?
J'essaie de modifier l'autorisation d'accès à un fichier :
os.chmod(path, mode)
Je veux qu'il soit en lecture seule :
os.chmod(path, 0444)
Existe-t-il un autre moyen de rendre un fichier en lecture seule ?
os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
Les drapeaux suivants peuvent également être utilisés dans l'argument mode de la commande os.chmod() :
stat.S_ISUID
Définir le bit UID.
stat.S_ISGID
Set-group-ID bit. Ce bit a plusieurs usages particuliers. Pour un un répertoire, il indique que la sémantique BSD doit être utilisée pour ce répertoire. répertoire : les fichiers qui y sont créés héritent de l'ID de groupe du répertoire, et non de l'ID de groupe. et non de l'ID de groupe effectif du processus de création, et les répertoires qui y sont créés auront également le bit S_ISGID activé. Pour un qui n'a pas le bit d'exécution de groupe (S_IXGRP), le bit set-group-ID indique un verrouillage obligatoire du fichier/enregistrement (voir aussi S_ENFMT).
stat.S_ISVTX
Petit bout de ficelle. Lorsque ce bit est activé dans un répertoire, cela signifie que qu'un fichier dans ce répertoire ne peut être renommé ou supprimé que par le propriétaire du fichier, par le propriétaire du répertoire ou par un processus privilégié. privilégié.
stat.S_IRWXU
Masque pour les autorisations du propriétaire du fichier.
stat.S_IRUSR
Le propriétaire a lu l'autorisation.
stat.S_IWUSR
Le propriétaire a l'autorisation d'écrire.
stat.S_IXUSR
Le propriétaire dispose d'une autorisation d'exécution.
stat.S_IRWXG
Masque pour les autorisations de groupe.
stat.S_IRGRP
Le groupe a l'autorisation de lire.
stat.S_IWGRP
Le groupe dispose d'une autorisation d'écriture.
stat.S_IXGRP
Le groupe a le droit d'exécuter.
stat.S_IRWXO
Masque pour les autorisations d'autres personnes (ne faisant pas partie du groupe).
stat.S_IROTH
D'autres ont lu l'autorisation.
stat.S_IWOTH
D'autres ont l'autorisation d'écrire.
stat.S_IXOTH
D'autres ont exécuté la permission.
stat.S_ENFMT
Application du verrouillage des fichiers du système V. Ce drapeau est partagé avec S_ISGID : le verrouillage des fichiers/enregistrements est appliqué aux fichiers qui n'ont pas pas le bit d'exécution de groupe (S_IXGRP).
stat.S_IREAD
Synonyme de S_IRUSR sous Unix V7.
stat.S_IWRITE
Synonyme de S_IWUSR sous Unix V7.
stat.S_IEXEC
Synonyme de S_IXUSR sous Unix V7.
os.chmod(path, 0444)
est la commande Python permettant de modifier les permissions de fichiers dans Python 2.x. Pour une solution combinant Python 2 et Python 3, modifiez la commande 0444
a 0o444
.
Vous pouvez toujours utiliser Python pour appeler la commande chmod en utilisant subprocess
. Je pense que cela ne fonctionnera que sous Linux.
import subprocess
subprocess.call(['chmod', '0444', 'path'])
Toutes les réponses actuelles font l'impasse sur la non-écriture : elles rendent le fichier lisible mais non exécutable pour tout le monde. Je vous l'accorde, c'est parce que la question initiale demandait des 444
mais nous pouvons faire mieux !
Voici une solution qui laisse intacts tous les bits individuels de "lecture" et d'"exécution". J'ai écrit un code verbeux pour le rendre facile à comprendre ; vous pouvez le rendre plus laconique si vous le souhaitez.
import os
import stat
def remove_write_permissions(path):
"""Remove write permissions from this path, while keeping all other permissions intact.
Params:
path: The path whose permissions to alter.
"""
NO_USER_WRITING = ~stat.S_IWUSR
NO_GROUP_WRITING = ~stat.S_IWGRP
NO_OTHER_WRITING = ~stat.S_IWOTH
NO_WRITING = NO_USER_WRITING & NO_GROUP_WRITING & NO_OTHER_WRITING
current_permissions = stat.S_IMODE(os.lstat(path).st_mode)
os.chmod(path, current_permissions & NO_WRITING)
Pourquoi cela fonctionne-t-il ?
En John La Rooy a souligné , stat.S_IWUSR
signifie en fait "le masque de bits pour les droits d'écriture de l'utilisateur". Nous voulons mettre le bit de permission correspondant à 0. Pour ce faire, nous avons besoin de la fonction exactement le contraire (c'est-à-dire un masque de bits avec un 0 à cet endroit et des 1 partout ailleurs). Les ~
qui renverse tous les bits, nous donne exactement cela. Si nous appliquons cela à n'importe quelle variable via l'opérateur "bitwise and" ( &
), il met à zéro le bit correspondant.
Nous devons également répéter cette logique avec les bits de permission "group" et "other". Ici, nous pouvons gagner du temps en utilisant simplement &
Les deux parties sont réunies (pour former le NO_WRITING
constante).
La dernière étape consiste à obtenir les permissions du fichier courant et effectuer l'opération "bitwise-and".
Il suffit d'ajouter 0 avant le numéro de l'autorisation :
Par exemple, nous voulons donner toutes les autorisations - 777
Syntaxe : os.chmod("nom_du_fichier" , permission)
import os
os.chmod("file_name" , 0777)
La version 3.7 de Python ne supporte pas cette syntaxe. Elle exige le préfixe '0o' pour les valeurs littérales octales - voici le commentaire que j'ai obtenu dans PyCharm
Ainsi, pour python 3.7, ce sera
import os
os.chmod("file_name" , 0o777)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.