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 fchmod - module os

Signature de la fonction fchmod

 def fchmod(fd: int, mode: int) -> None

Description

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

cette fonction est pleinement opérationnelle sur un système d'exploitation compatible Unix/Linux. Par contre, elle n'est pas proposée sous environnement Windows !
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 
 2 
fd = os.open("file_name", os.O_RDONLY)
os.fchmod(fd, 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 
 3 
rights = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | IROTH | IXOTH
fd = os.open("file_name", os.O_RDONLY)
os.fchmod(fd, 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).

help(os.fchmod)

Change the access permissions of the file given by file descriptor fd.

Equivalent to os.chmod(fd, mode).

Paramètres

ParamètreDescription
 fd : int 
Le descripteur du fichier pour qui changer les droits.
 mode : int 
Les nouveaux droits d'accès du fichier.

Valeur de retour

Cette méthode ne renvoie aucune valeur.

Exception

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 
 31 
 32 
import os
import sys

path = "demo.txt"

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:
    fd = os.open(path, os.O_RDONLY)

    os.fchmod(fd, 0o600)
    os.system(f"ls -l {path}")

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

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

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

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