我有一个有趣的场景,我想获得一些关于实施的专家建议。我在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是一个很好的方法,但我希望在可能的情况下看到其他一些实现。
提前致谢!
答案 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
循环中应用此函数。