如果您在文件上运行os.stat(path)
,然后取其st_mode
参数,那么您如何从此处获得像这样的字符串:rw-r--r--
从Unix世界中已知?如何将状态输出转换为unix权限字符串
7
A
回答
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
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
相关问题
- 1. 将ReadProcessMemory输出转换为字符串
- 2. 将Redis输出字符串转换为位字符串
- 3. Java:将Gzip字符串转换为输出字符串
- 4. 如何将UnicodeEncoding输出转换为纯字符串?
- 5. 如何将Savant3模板的输出转换为字符串?
- 6. 如何将输出“__main__.Book对象”转换为字符串?
- 7. 如何将ostream_iterator的输出转换为字符串?
- 8. 如何将字符串的命令输出转换为整数?
- 9. 如何将控制台输出转换为字符串?
- 10. 如何将UNIX中的errno转换为相应的字符串?
- 11. 如何将HH:MM:SS字符串转换为UNIX纪元时间?
- 12. 如何将命令输出转换为实时状态更新?
- 13. 将Unix纪元作为字符串转换为time.Time转到
- 14. C#将字符串转换为字节并作为字符串输出
- 15. 如何将控制台输出的字符转换为字符串; C++
- 16. 如何将字符串的字符串转换为字符?
- 17. 将字符串转换为字符串
- 18. 将字符串转换为字符串
- 19. 将字符串转换为字符串
- 20. 如何将字符串转换为UInt32?
- 21. 如何将字符串转换为UTF8?
- 22. 如何将字符串转换为long
- 23. 如何将字符串转换为xml
- 24. 如何将OutputStream转换为字符串?
- 25. 如何将字符串转换为Guid
- 26. 如何将Ada.Real_TIme.Time转换为字符串?
- 27. 如何将BeautifulSoup.ResultSet转换为字符串
- 28. 如何将BigInteger转换为字符串?
- 29. 如何将字符串转换为DurationFieldType?
- 30. 如何将字符串转换为Bytearray
+1它可以在其他Python版本以及工作,只需从复制功能和相关数据[源代码](http://hg.python.org/cpython/file/3.3/Lib/stat.py)。演示:http://ideone.com/P45ChT –