Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Module « os » Python 3.11.3

Fonction chmod - module os

Signature de la fonction chmod

 def chmod(path: str | bytes | os.PathLike, mode: int, *, dir_fd=None, follow_symlinks=True) -> None

Description

Cette fonction permet de changer les droits d'accès d'un fichier ou d'un dossier (chmod = change mode).

cette fonction est pleinement opérationnelle sur un système d'exploitation compatible Unix/Linux. Par contre, sur Windows, son fonctionnement est très restreint !
il est possible, en Python, de spécifier un entier en base octale (base 8), en débutant votre entier via le caractère 0o.

La gestion des droits Unix/Linux étant basée sur une représentation en base octale, je vous recommande conserver cette façon de faire pour spécifier les nouveaux droits d'accès de votre fichier (ou de votre dossier).

 1 
os.chmod("filename", 0o755)   # -rwxr-xr-x
Spécification des droits d'accès en base octale.

Pour autant, il est aussi possible de spécifier les droits d'accès via un masque binaire et un jeu de constantes proposé par le module « stat ». Voici un exemple d'utilisation de cette possibilité.

 1 
 2 
rights = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | IROTH | IXOTH
os.chmod("filename", rights)   # -rwxr-xr-x
Spécification des droits d'accès via un masque binaire.

Le tableau suivant présente les constantes relatives aux droits d'accès sur un fichier (ou un dossier) disponibles sur un système d'exploitation compatible Unix/Linux.

Nom de la constante Valeur numérique Description
Constantes applicables au propriétaire du fichier
stat.S_IRUSR 0o0400 Accès en lecture pour le propriétaire du fichier.
stat.S_IWUSR 0o0200 Accès en écriture pour le propriétaire du fichier.
stat.S_IXUSR 0o0100 Accès en exécution pour le propriétaire du fichier (ou droit de traverser pour un dossier).
stat.S_IRWXU 0o0700 Accès en lecture, écriture et exécution pour le propriétaire du fichier.
Equivaut à stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR.
Constantes applicables au groupe primaire du fichier
stat.S_IRGRP 0o0040 Accès en lecture pour le groupe primaire du fichier.
stat.S_IWGRP 0o0020 Accès en écriture pour le groupe primaire du fichier.
stat.S_IXGRP 0o0010 Accès en exécution pour le groupe primaire du fichier (ou droit de traverser pour un dossier).
stat.S_IRWXG 0o0070 Accès en lecture, écriture et exécution pour le groupe primaire du fichier.
Equivaut à stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP.
Constantes applicables aux autres utilisateurs du fichier
stat.S_IROTH 0o0004 Accès en lecture pour les autres utilisateurs du fichier.
stat.S_IWOTH 0o0002 Accès en écriture pour les autres utilisateurs du fichier.
stat.S_IXOTH 0o0001 Accès en exécution pour les autres utilisateurs du fichier (ou droit de traverser pour un dossier).
stat.S_IRWXO 0o0007 Accès en lecture, écriture et exécution pour les autres utilisateurs du fichier.
Equivaut à stat.S_IROTH | stat.S_IWOTH | stat.S_IXOTH.
Autres constantes
stat.S_ISUID 0o4000 Défini l'identifiant utilisateur (UID) effectif d'un processus lors de son exécution.
stat.S_ISGID 0o2000 Défini l'identifiant de groupe (GID) effectif d'un processus lors de son exécution.
stat.S_ENFMT 0o2000 Verrouillage strict (partagé avec S_ISGID) - System V uniquement.
stat.S_ISVTX 0o1000 Défini le « Sticky Bit » (attribut de suppression restreinte). S'il est apposé sur un répertoire et si la modification est permise (w), alors seul le propriétaire du dossier peut y supprimer des fichiers. Les autres utilisateurs autorisés ne peuvent que modifier le contenu du répertoire (mais sans possibilité de suppression de fichiers).

Sur Windows, voici les constantes autorisées : toutes les autres constantes, vues ci-dessus, seront sans effet.

Nom de la constante Valeur numérique Description
stat.S_IREAD 0o0400 Accès en lecture pour le propriétaire du fichier (synonyme de stat.S_IRUSR).
stat.S_IWRITE 0o0200 Accès en écriture pour le propriétaire du fichier (synonyme de stat.S_IWUSR).
stat.S_IEXEC 0o0100 Accès en exécution pour le propriétaire du fichier, ou droit de traverser pour un dossier (synonyme de stat.S_IXUSR). Attention : ce droit ne peut être que consulté (en fait il est déduit du type de fichier, selon son extension et sa nature). Mais la fonction chmod ne permettra pas, sous Windows, de changer cette autorisation.

Deux possibilités vous sont proposées pour indiquer le fichier pour lequel changer les droits d'accès :

chmod("./file", 0o755)
fd = os.open("./parentFolder", os.O_RDONLY) 
chmod("file", 0x755, dir_fd=fd)
le caractère * situé dans la déclaration des paramètres de la fonction chmod permet d'indiquer la fin des paramètres positionnels et le début des paramètres nommés.
la gestion des descripteurs de fichiers et de dossier, et donc du paramètre dir_fd, est pleinement pris en charge depuis la version 3.3 de Python. De plus, la notion de descripteur, emblème d'un système d'exploitation Unix/Linux, n'est pas forcément supportée sur tous les autres systèmes. Le set os.supports_dir_fd permet donc de savoir, en fonction du système d'exploitation considéré, quelles sont les fonctions du module os supportant la gestion des descripteurs de dossiers. Il est donc possible de conditionner leurs utilisations.
if os.chmod in os.supports_dir_fd:
    fd = os.open("./parentFolder", os.O_RDONLY) 
    chmod("file", 0x755, dir_fd=fd)

help(os.chmod)

Change the access permissions of a file.

  path
    Path to be modified.  May always be specified as a str, bytes, or a path-like object.
    On some platforms, path may also be specified as an open file descriptor.
    If this functionality is unavailable, using it raises an exception.
  mode
    Operating-system mode bitfield.
  dir_fd
    If not None, it should be a file descriptor open to a directory,
    and path should be relative; path will then be relative to that
    directory.
  follow_symlinks
    If False, and the last element of the path is a symbolic link,
    chmod will modify the symbolic link itself instead of the file
    the link points to.

It is an error to use dir_fd or follow_symlinks when specifying path as
  an open file descriptor.
dir_fd and follow_symlinks may not be implemented on your platform.
  If they are unavailable, using them will raise a NotImplementedError.

Paramètres

ParamètreDescription
 path : str | bytes | os.PathLike 
Le nouveau répertoire de travail.
 mode : int 
Les nouveaux droits d'accès du fichier.
 dir_df : int = None 
Le descripteur du dossier parent contenant le fichier pour lequel changer les droits d'accès.
 follow_symlinks : bool = True 
Permet de suivre les liens symboliques contenus dans le chemin.

Valeur de retour

Cette méthode ne renvoie aucune valeur.

Exceptions

Exemple(s) de code

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
import os
import sys

path = "demo.txt"

# On créer un fichier de démonstration.
try:
    with open(path, "w") as the_file:
        print("Ok", file=the_file)
except IOError:
    print("Impossible de créer le fichier de démonstration", file=sys.stderr)
    exit(-1)

# On change à plusieurs reprises les droits d'accès et on les affiche.
try:
    os.chmod(path, 0o600)
    os.system(f"ls -l {path}")

    os.chmod(path, 0o640)
    os.system(f"ls -l {path}")

    os.chmod(path, 0o644)
    os.system(f"ls -l {path}")

    os.chmod(path, 0o755)
    os.system(f"ls -l {path}")
except PermissionError:
    print("Tu n'as pas les autorisations nécessaires", file=sys.stderr)
except OSError:
    print("Ca ne marche pas et je ne t'en dirais pas plus ;-)", file=sys.stderr)
Exemple d'utilisation de la fonction os.chmod.

Et voici les résultats produits par cet exemple.

$> python sample.py
-rw-------. 1 dominique dominique 3  5 janv. 10:13 demo.txt
-rw-r-----. 1 dominique dominique 3  5 janv. 10:13 demo.txt
-rw-r--r--. 1 dominique dominique 3  5 janv. 10:13 demo.txt
-rwxr-xr-x. 1 dominique dominique 3  5 janv. 10:13 demo.txt
$> 

Voir aussi