如果你os.stat(path)
在一个文件上运行然后获取它的st_mode
参数,你如何从那里得到一个像这样的字符串:rw-r--r--
正如 Unix 世界所知?
问问题
6024 次
3 回答
14
从 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
于 2013-07-23T12:22:12.180 回答
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
于 2013-07-23T12:10:45.547 回答
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
)。随意改进它。
于 2013-07-23T11:49:33.463 回答