为什么Python的os.stat()告诉我文件组为空?

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=[]) 
1个回答

1
根据文档(我强调):
gid是整数,name和password是字符串,成员列表是字符串列表。(请注意,大多数用户在密码数据库中未明确列为所属组的成员。检查两个数据库以获取完整的成员资料。还要注意,以+或-开头的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 

是的,你说得对。还有其他人给了我同样的建议,它有效:https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.python/yzeXZRLRnWY - Saqib Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接