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

时间:2012-12-19 21:44:22

标签: python

我在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 个答案:

答案 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