86 votes

Modifier les permissions d'un fichier en Python

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 ?

5voto

Sh3ljohn Points 746

Pour information, voici une fonction qui permet de convertir une chaîne de permission de 9 caractères (par exemple "rwsr-x-wt") en un masque qui peut être utilisé avec la fonction os.chmod() .

def perm2mask(p):

    assert len(p) == 9, 'Bad permission length'
    assert all(p[k] in 'rw-' for k in [0,1,3,4,6,7]), 'Bad permission format (read-write)'
    assert all(p[k] in 'xs-' for k in [2,5]), 'Bad permission format (execute)'
    assert p[8] in 'xt-', 'Bad permission format (execute other)'

    m = 0

    if p[0] == 'r': m |= stat.S_IRUSR 
    if p[1] == 'w': m |= stat.S_IWUSR 
    if p[2] == 'x': m |= stat.S_IXUSR 
    if p[2] == 's': m |= stat.S_IXUSR | stat.S_ISUID 

    if p[3] == 'r': m |= stat.S_IRGRP 
    if p[4] == 'w': m |= stat.S_IWGRP 
    if p[5] == 'x': m |= stat.S_IXGRP 
    if p[5] == 's': m |= stat.S_IXGRP | stat.S_ISGID 

    if p[6] == 'r': m |= stat.S_IROTH 
    if p[7] == 'w': m |= stat.S_IWOTH 
    if p[8] == 'x': m |= stat.S_IXOTH 
    if p[8] == 't': m |= stat.S_IXOTH | stat.S_ISVTX

    return m

Il convient de noter que l'activation des bits SUID/SGID/SVTX entraîne automatiquement l'activation du bit d'exécution correspondant. Sans cela, l'autorisation résultante serait invalide ( ST caractères).

3voto

Trying2Learn Points 11

Vous pouvez également utiliser pathlib

from pathlib import Path

fl = Path("file_name")

fl.chmod(0o444)

1voto

lmmx Points 328

Dans Python 3.4+, lorsque l'on travaille avec pathlib.Path vous pouvez appeler chmod() directement en tant que méthode sur l'objet chemin. L'exemple suivant est donné dans les docs :

>>> p = Path('setup.py')
>>> p.stat().st_mode
33277
>>> p.chmod(0o444)
>>> p.stat().st_mode
33060

-1voto

solgar Points 1467

Pas besoin de se souvenir des drapeaux. Rappelez-vous que vous pouvez toujours faire :

subprocess.call(["chmod", "a-w", "file/path])

Pas portable, mais facile à écrire et à mémoriser :

  • u - utilisateur
  • g - groupe
  • o - autres
  • a - tous
  • + ou - (ajouter ou supprimer une autorisation)
  • r - lire
  • w - écrire
  • x - exécuter

Référer man chmod pour des options supplémentaires et des explications plus détaillées.

Prograide.com

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.

Powered by:

X