使用Python的stat函数有效地获取所有者,组和其他权限

puk*_*puk 6 python permissions octal stat

题:

如何有效地使用stat函数来获取有意义的文件权限(用户,组和其他).

细节:

我正在查询文件权限,如下所示:

statInfo = os.stat
permissions = stat.S_IMODE ( os.stat ( 'fooBar.txt' ).st_mode )
Run Code Online (Sandbox Code Playgroud)

这将以十进制形式返回权限.因此,如果fooBar.txt具有八进制文件权限0700,则此处permissions设置为十进制值448.我想是设置9个变量对每个权限(ownerRead,ownerWright,ownerExecute,groupRead,...)如果我要做到这一点,我会用蛮力方法如下所示:

statInfo = os.stat
permissions = stat.S_IMODE ( os.stat ( 'fooBar.txt' ).st_mode )
octPermissions = oct ( permissions )

ownerRead = octPermissions [1] >= 4
ownerWrite = octPermissions [1] == 2 or octPermissions [1] == 6 or octPermissions [1] == 3 or 
ownerExecute = octPermissions [1] == 1 or octPermissions [1] == 5 or octPermissions [1] == 3
Run Code Online (Sandbox Code Playgroud)

是否有一种更有效的方法来做到这一点,而不必转换为八进制,因为这个函数将被调用相当多?

NPE*_*NPE 5

您可以使用按位AND运算符:

m = os.stat('fooBar.txt').st_mode
otherExec  = bool(m & 0001)
otherWrite = bool(m & 0002)
otherRead  = bool(m & 0004)
groupExec  = bool(m & 0010)
groupWrite = bool(m & 0020)
groupRead  = bool(m & 0040)
...
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

使用按位AND和stat模块中的常量:

import stat
import os

mode = os.stat('fooBar.txt').st_mode

otherRead  = bool(mode & stat.S_IROTH)
otherWrite = bool(mode & stat.S_IWOTH)
otherExec  = bool(mode & stat.S_IXOTH)
...
Run Code Online (Sandbox Code Playgroud)

更具可读性.