Se si esegue os.stat(path)
su un file e quindi si prende il suo parametro st_mode
, come si arriva da lì a una stringa come questa: rw-r--r--
come noto dal mondo Unix?Come convertire un'uscita stat in una stringa di permessi unix
7
A
risposta
11
Dal momento che Python 3.3 è possibile utilizzare stat.filemode
:
In [7]: import os, stat
In [8]: print(stat.filemode(os.stat('/home/soon/foo').st_mode))
-rw-r--r--
In [9]: ls -l ~/foo
-rw-r--r-- 1 soon users 0 Jul 23 18:15 /home/soon/foo
2
La seguente funzione otterrà ciò, date alcune circostanze normali (ad esempio, non l'ho provato su Windows o con SELinux).
import stat
def permissions_to_unix_name(st_mode):
permstr = ''
usertypes = ['USR', 'GRP', 'OTH']
for usertype in usertypes:
perm_types = ['R', 'W', 'X']
for permtype in perm_types:
perm = getattr(stat, 'S_I%s%s' % (permtype, usertype))
if st_mode & perm:
permstr += permtype.lower()
else:
permstr += '-'
return permstr
Questo produce una stringa di base come richiesto. Tuttavia, questo potrebbe anche essere migliorato per visualizzare ulteriori dati, ad es. se si tratta di una directory (d
) o di un collegamento simbolico (l
). Sentiti libero di migliorarlo.
4
Qualcosa di simile a questo:
import stat, os
def permissions_to_unix_name(st):
is_dir = 'd' if stat.S_ISDIR(st.st_mode) else '-'
dic = {'7':'rwx', '6' :'rw-', '5' : 'r-x', '4':'r--', '0': '---'}
perm = str(oct(st.st_mode)[-3:])
return is_dir + ''.join(dic.get(x,x) for x in perm)
...
>>> permissions_to_unix_name(os.stat('.'))
'drwxr-xr-x'
>>> ls -ld .
drwxr-xr-x 62 monty monty 4096 Jul 23 13:23 ./
>>> permissions_to_unix_name(os.stat('so.py'))
'-rw-rw-r--'
>>> ls -ld so.py
-rw-rw-r-- 1 monty monty 68 Jul 18 15:57 so.py
Problemi correlati
- 1. Unix stat()/lstat() per Java
- 2. Stampa dei permessi dei file come 'ls -l' usando stat (2) in C
- 3. Come convertire la stringa in numero intero in UNIX
- 4. Confronta una stringa in Unix
- 5. Convertire timestamp Unix in datetime
- 6. Come posso convertire una stringa datetime in un timestamp UNIX in SQLite3?
- 7. Come verificare il primo carattere di una stringa in unix
- 8. come convertire una stringa c in una stringa d?
- 9. PHP: Come convertire 0777 (un ottale) in una stringa?
- 10. Convertire Char in una stringa
- 11. Come convertire i valori in una stringa?
- 12. Come convertire un int in una stringa?
- 13. Come convertire un HTMLElement in una stringa
- 14. Come convertire WebResponse.GetResponseStream in una stringa?
- 15. Ruby: Come convertire una stringa in booleana
- 16. Come convertire una stringa Lua in float
- 17. Come convertire Bitmap in una stringa Base64?
- 18. come convertire una stringa in un bool
- 19. Come convertire StreamReader in una stringa?
- 20. Come convertire una stringa in un decimale?
- 21. perl come convertire una stringa in Datetime?
- 22. Come convertire una stringa in CharSequence?
- 23. Come convertire una stringa in UTF8?
- 24. Come posso convertire una stringa in jsx?
- 25. Come convertire st_mtime (che ottiene dalla funzione stat) per stringa o char
- 26. convertire unix timestamp in H2 timestamp
- 27. Come convertire una data in una stringa formattata in VB.net?
- 28. Come convertire una stringa in una funzione in Clojure?
- 29. Come convertire una stringa in una costante in Ruby?
- 30. Come convertire una stringa quotata in una normale in Makefile?
+1 Può funzionare in altre versioni python così, è sufficiente copiare la funzione ei relativi dati dal [codice sorgente] (http://hg.python.org/cpython/file/3.3/Lib/stat.py). Demo: http://ideone.com/P45ChT –