用Python检查Linux中的文件权限

用Python检查Linux中的文件权限,python,Python,我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受,我将警告它们,但我不仅要检查登录用户的权限,还要检查组和其他人的权限。我该怎么做?在我看来,Python中的os.access()只能检查运行脚本的用户的权限。使用带有标记的os.R\u OK、os.W\u OK和os.X\u OK 编辑:检查您是否正在Windows上测试目录权限。您可以通过与解释结果的模块一起检查文件权限。您是对的,与基础系统调用一样,检查特定用户(真实而非有效的ID,以帮助解决suid情况) 是获取有关文件的更

我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受,我将警告它们,但我不仅要检查登录用户的权限,还要检查组和其他人的权限。我该怎么做?在我看来,Python中的
os.access()
只能检查运行脚本的用户的权限。

使用带有标记的
os.R\u OK
os.W\u OK
os.X\u OK


编辑:检查您是否正在Windows上测试目录权限。

您可以通过与解释结果的模块一起检查文件权限。

您是对的,与基础系统调用一样,检查特定用户(真实而非有效的ID,以帮助解决suid情况)

是获取有关文件的更多常规信息的正确方法,包括每个用户、组和其他人的权限。
os.stat
返回的对象的
st_mode
属性具有文件的权限位

为了帮助解释这些位,您可能需要使用模块。具体地说,您需要定义位掩码,并使用
&
运算符(位和)在
st_模式
属性中屏蔽相关位——例如,如果您只需要对某个文件是否为组可读进行真/假检查,一种方法是:

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 //the last 3 or 4 digits is probably what you want.

更多详情请参见此:

太好了,这正是我希望找到的。非常感谢你。我刚刚开始为一个小项目学习python,所以你可以看出我还在学习。非常感谢!非常好的实用工具。谢谢您没有阅读问题,os.access仅检查当前用户的权限。此答案对我最有用,因为我正在查找文件的ACL八进制值。同样,这非常有用。简单而优雅,谢谢
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