2009-12-07 70 views
46

我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受我会警告它们,但我想检查不仅仅是登录的权限用户,还包括组和其他人。我怎样才能做到这一点?在我看来,Python中的.access()只能检查运行脚本的用户的权限。在Python中使用Python检查文件权限

回答

78

你是对的,os.access,如底层access系统调用,检查特定用户(真实而不是有效的ID,以帮助suid情况)。

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

为了解释这些位,您可能需要使用stat模块。具体来说,您需要定义here的位掩码,并且您将使用&运算符(位和)来使用它们来掩盖该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通话可能有些昂贵,所以一定要抽出你所关心的单次调用的所有信息,而不是不断重复每一个兴趣点的电话;-)。

+0

很棒,这正是我希望找到的。非常感谢你。我刚刚开始在工作中为一个小型项目选择python,所以你可以告诉我还在学习。非常感谢! – jphenow 2009-12-07 19:11:34

+0

非常好的实用工具。谢谢! – zerocog 2016-11-28 21:26:24

7

使用os.access(),标记为os.R_OK,os.W_OKos.X_OK

编辑:如果要在Windows上测试目录权限,请检出this related question

+5

你没有阅读问题,os.access只检查权限当前用户。 – 2011-07-04 20:22:02

1

只是为了帮助其他人喜欢我谁来到这里的东西有点不同:

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. 

有关详细信息,请参阅本:https://stackoverflow.com/a/5337329/1814774