使用Python检查Linux目录权限

时间:2013-04-16 18:18:40

标签: python linux filesystems

我有一个有趣的场景,我想获得一些关于实施的专家建议。我在Linux上运行的Python应用程序需要根据组权限返回单个目录。

例如,Linux文件系统如下所示:

/Directory/Apple
/Directory/Beta
/Directory/Carotene

Apple / Beta和Carotene的/ etc / group中有一个组。这些组权限分配给每个目录(Apple目录只能由Apple组成员查看/执行)。登录用户只能是一个组(Apple / Beta / Carotene)的成员,我需要能够找出用户可以访问的目录而不会抛出异常。我不能在Python中使用组成员资格调用,因为上面的目录结构是一个远程安装的文件系统。

所以为了简化这一点:如果用户是Beta组的成员,我需要统计/ Directory中的每个子目录,然后只返回一个路径(在此示例/ Directory / Beta中,因为用户是成员组目录)。

我在想os.stat是一个很好的方法,但我希望在可能的情况下看到其他一些实现。

提前致谢!

2 个答案:

答案 0 :(得分:3)

要确定特定目录是否可访问,请使用os.access

os.access('/Directory/Apple', os.R_OK)

要检查/Directory的所有直接子目录,请尝试以下循环:

def find_my_group_directory():
  #UNTESTED
  root, dirs, _ = next(os.walk('/Directory'))
  for dir in dirs:
    if os.access(os.path.join(root, dir), os.R_OK):
      return os.path.join(root, dir)
  return None

答案 1 :(得分:1)

请求宽恕比允许(EAFP)更容易。要检查目录是否可访问:

import os
def accessible(dir):
    try:
        os.listdir(dir)
    except OSError:
        return False
    return True
print(accessible('/root'))

要检查目录的所有子目录是否被允许,请在for循环中应用此函数。