2013-07-23 13 views

cevap

11

Python 3.3 beri şunu kullanabilirsiniz 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 
+7

+1 Belgede gerek diğer piton sürümlerinde işe basitçe dan işlevini ve ilgili verileri kopyalama [kaynak kodu] (http://hg.python.org/cpython/file/3.3/Lib/stat.py). Demo: http://ideone.com/P45ChT –

2

, (yani Windows altında veya SELinux ile test etmedim). gibi sorular

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 

Bu temel bir dize oluşturur. Bununla birlikte, bu daha fazla veriyi görüntülemek için de geliştirilebilir, örn. bir dizin (d) ya da bir sembolik (l) olup. Bunu geliştirmek için çekinmeyin. Böyle

4

şey:

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 
İlgili konular