Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

EDIT : Ouais ça c'est cool cette 2e soluce smile

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