我在Solaris 5-10上使用python 2.6.4。
我有一个名为“myFile”的文件。它由其他人拥有,由我(“myuser”)在文件组中(“mygrp”)。下面是我的python代码。为什么它告诉我mygrp没有成员???
>>> import os, pwd, grp
>>> stat_info = os.stat("myFile")
>>> fileUID = stat_info.st_uid
>>> fileGID = stat_info.st_gid
>>> fileGroup = grp.getgrgid(fileGID)[0]
>>> fileUser = pwd.getpwuid(fileUID)[0]
>>> print "grp.getgrgid(fileGID) = %s" % grp.getgrgid(fileGID)
grp.getgrgid(fileGID) = grp.struct_group(gr_name='mygrp', gr_passwd='', gr_gid=100, gr_mem=[])
答案 0 :(得分:2)
根据the docs(强调我的):
gid是一个整数,名称和密码是字符串,成员列表是字符串列表。 (请注意,根据密码数据库,大多数用户未明确列为其所在组的成员。请检查两个数据库以获取完整的成员资格信息。另请注意以gr +开头的gr_name - 可能是YP / NIS参考,可能无法通过getgrnam()或getgrgid()访问。)
这可能解释了为什么你没有在结果中列出,即使你是该组的成员。我相信你必须使用pwd.getpwall
并过滤它以获得组ID以获得该组的其他成员。
更新:根据评论中张贴的link进一步解释:
每个帐户都有一个主要群组,还有一些帐户 有附加组。主要群体是一个 pwd条目中的.pw_gid属性。其他组 是那些在.gr_mem属性中提到帐户的人 在他们的grp条目中。
检索组中所有成员的示例代码:
def all_members(gid):
primary_members = [user.pw_name for user in pwd.getpwall() if user.pw_gid == gid]
additional_members = grp.getgrgid(gid).gr_mem
return primary_members + additional_members