#1 Le 19/03/2015, à 21:28
- Hizoka
[resolu] Python3 et affichage des permissions
Bonsoir,
je cherche un moyen de récupérer les permissions des fichiers/dossiers sous forme de texte comme drwxr-xr-x par exemple.
Le tout en python3.
je connais :
os.stat_result(st_mode=16877, st_ino=272839, st_dev=2050, st_nlink=50, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1414332118, st_mtime=1426790323, st_ctime=1426790323)
mais ce n'est pas ce que je veux...
Une idée ? j'ai pas trouvé...
Dernière modification par Hizoka (Le 19/03/2015, à 23:09)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 19/03/2015, à 22:23
- pingouinux
Re : [resolu] Python3 et affichage des permissions
Bonsoir,
J'ai exhumé un truc que j'avais fait il y a longtemps. Le script tourne en python 2 ou 3, et prend le nom du fichier (ou du répertoire) en argument.
import os, sys, stat
def oct2rwx(oct) :
rwx=''
if oct&4 : rwx+='r'
else : rwx+='-'
if oct&2 : rwx+='w'
else : rwx+='-'
if oct&1 : rwx+='x'
else : rwx+='-'
return rwx
def mod2rwx(mode) :
m=''
if stat.S_ISDIR (mode) : m+='d'
if stat.S_ISCHR (mode) : m+='c'
if stat.S_ISBLK (mode) : m+='b'
if stat.S_ISREG (mode) : m+='-'
if stat.S_ISFIFO(mode) : m+='p'
if stat.S_ISLNK (mode) : m+='l'
if stat.S_ISSOCK(mode) : m+='s'
m+=oct2rwx((mode&0o700)>>6)
m+=oct2rwx((mode&0o070)>>3)
m+=oct2rwx( mode&0o007 )
return m
fichier=sys.argv[1]
mode=os.stat(fichier).st_mode
print('fichier=%s mode=%s'%(fichier,mod2rwx(mode)))
Ajouté : Je m'aperçois qu'il n'est pas tenu compte des setuid et setgid bits, ni du sticky bit.
Édité : Encore plus simple, sans l'inconvénient ci-dessus (mais ne tourne qu'en python3)
import os, sys, stat
fichier=sys.argv[1]
mode=os.stat(fichier).st_mode
print('fichier=%s mode=%s'%(fichier,stat.filemode(mode)))
Dernière modification par pingouinux (Le 19/03/2015, à 22:54)
Hors ligne
#3 Le 19/03/2015, à 23:06
- Hizoka
Re : [resolu] Python3 et affichage des permissions
merci à toi, etrange qu'il n'y ait pas de truc tout fait pour ça...
merci
EDIT : Ouais ça c'est cool cette 2e soluce
Dernière modification par Hizoka (Le 19/03/2015, à 23:09)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 20/03/2015, à 06:58
- pingouinux
Re : [resolu] Python3 et affichage des permissions
Voici la version corrigée pour python2, mais c'est assez lourdingue à côté de l'autre solution.
import os, sys, stat
def oct2sst(oct) :
sst=''
if oct&4 : sst+='S'
else : sst+='-'
if oct&2 : sst+='S'
else : sst+='-'
if oct&1 : sst+='T'
else : sst+='-'
return sst
def oct2rwx(oct,sst) :
rwx=''
if oct&4 : rwx+='r'
else : rwx+='-'
if oct&2 : rwx+='w'
else : rwx+='-'
if sst=='-' :
if oct&1 : rwx+='x'
else : rwx+='-'
else :
if oct&1 : rwx+=sst.lower()
else : rwx+=sst
return rwx
def mod2rwx(mode) :
m=''
if stat.S_ISDIR (mode) : m+='d'
if stat.S_ISCHR (mode) : m+='c'
if stat.S_ISBLK (mode) : m+='b'
if stat.S_ISREG (mode) : m+='-'
if stat.S_ISFIFO(mode) : m+='p'
if stat.S_ISLNK (mode) : m+='l'
if stat.S_ISSOCK(mode) : m+='s'
sst=oct2sst((mode&0o7000)>>9)
m+=oct2rwx((mode&0o700)>>6,sst[0])
m+=oct2rwx((mode&0o070)>>3,sst[1])
m+=oct2rwx( mode&0o007, sst[2])
return m
fichier=sys.argv[1]
mode=os.stat(fichier).st_mode
print('fichier=%s mode=%s'%(fichier,mod2rwx(mode)))
Hors ligne