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 ?
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).
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 :
Référer man chmod
pour des options supplémentaires et des explications plus détaillées.
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.