3

我在 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=[]) 
4

1 回答 1

1

根据文档(强调我的):

gid是整数,name和password是字符串,member list是字符串列表。(请注意,根据密码数据库,大多数用户并未明确列为他们所在组的成员。检查两个数据库以获取完整的成员信息。另请注意,以 + 或 - 开头的 gr_name 可能是 YP /NIS 参考,可能无法通过 getgrnam() 或 getgrgid() 访问。)

这或许可以解释为什么您没有在结果中列出,即使您是该组的成员。我相信您必须使用pwd.getpwall并过滤它以获取组 ID,以获取该组的其余成员。

更新:根据OP 在评论中发布的链接进一步解释:

每个帐户都有一个主要组,有些帐户还具有附加组。主要组是 pwd 条目中 .pw_gid 属性中的组。其他组是那些在其 grp 条目中的 .gr_mem 属性中提及该帐户的组。

检索组的所有成员的示例代码:

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 
于 2012-12-19T22:13:41.797 回答