2013-07-23 30 views

回答

11

因爲Python 3.3,你可以使用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它可以在其他Python版本以及工作,只需從複製功能和相關數據[源代碼](http://hg.python.org/cpython/file/3.3/Lib/stat.py)。演示:http://ideone.com/P45ChT –

2

下面的函數將實現這一點,給出一些常見的情況(即我沒有在Windows或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 

這產生了一個基本的字符串,如問。然而,這也可以改進以顯示更多的數據,例如,無論是目錄(d)還是符號鏈接(l)。隨意改進它。

4

事情是這樣的:

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 
相關問題