1

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

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

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

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

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

我认为 os.stat 是一种很好的方法,但如果可能的话,我想看看其他一些实现。

提前致谢!

4

2 回答 2

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
于 2013-04-16T18:22:17.373 回答
1

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

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

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

于 2013-04-16T18:39:34.607 回答