如何将stat输出转换为unix权限字符串

jav*_*vex 7 python

如果你运行os.stat(path)一个文件,然后获取它的st_mode参数,你怎么从那里得到这样的字符串:rw-r--r--从Unix世界知道?

awe*_*oon 13

从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
Run Code Online (Sandbox Code Playgroud)

  • +1它也适用于其他python版本,只需复制[源代码]中的函数和相关数据(http://hg.python.org/cpython/file/3.3/Lib/stat.py).演示:http://ideone.com/P45ChT (7认同)

Ash*_*ary 5

像这样的东西:

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
Run Code Online (Sandbox Code Playgroud)