我正在编写一段脚本,用于检查用户目录中文件的权限,如果权限不可接受,我将对其进行警告。但我想要检查的是不仅登录用户的权限,还有组和其他用户的权限。我该如何做?在Python中,os.access()
似乎只能检查运行脚本的用户的权限。
我正在编写一段脚本,用于检查用户目录中文件的权限,如果权限不可接受,我将对其进行警告。但我想要检查的是不仅登录用户的权限,还有组和其他用户的权限。我该如何做?在Python中,os.access()
似乎只能检查运行脚本的用户的权限。
你说得没错,os.access 和底层的 access 系统调用一样,检查特定用户(实际ID而非有效ID,以帮助处理suid情况)。
os.stat 是获取有关文件更一般信息的正确方法,包括每个用户、组和其他人的权限。 os.stat
返回的对象的 st_mode
属性具有文件的权限位。
为了帮助解释这些位,您可能需要使用 stat 模块。 具体来说,您将需要在 这里 定义的位掩码,并使用 &
运算符(按位与)来在 st_mode
属性中屏蔽相关位 - 例如,如果您只需要对某个文件进行组可读性的 True/False 检查,则可以采用以下方法:
import os
import stat
def isgroupreadable(filepath):
st = os.stat(filepath)
return bool(st.st_mode & stat.S_IRGRP)
注意:调用os.stat
可能会比较昂贵,因此请确保一次性提取您关心的所有信息,而不是为每个感兴趣的位重复调用。
只是为了帮助像我这样来到这里寻找不同事物的其他人:
import os
import stat
st = os.stat(yourfile)
oct_perm = oct(st.st_mode)
print(oct_perm)
# -> 0o100664
你可能需要的是最后3到4位数字。
查看此链接以获取更多细节:https://dev59.com/YW435IYBdhLWcg3wlBCC#5337329
import os
os.access('my_file', os.R_OK) # Check for read access
os.access('my_file', os.W_OK) # Check for write access
os.access('my_file', os.X_OK) # Check for execution access
os.access('my_file', os.F_OK) # Check for existence of file
使用os.access()
函数和os.R_OK
、os.W_OK
和os.X_OK
标志来进行操作。
编辑: 如果您正在测试Windows上的目录权限,请查看这个相关问题。