3

Solaris 5-10 で python 2.6.4 を使用しています。

「myFile」という名前のファイルがあります。ファイルのグループ (「mygrp」) に属している私 (「myuser」) が所有しています。以下は私の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 は整数、名前とパスワードは文字列、メンバー リストは文字列のリストです。(ほとんどのユーザーは、パスワード データベースによると、所属するグループのメンバーとして明示的にリストされていないことに注意してください。完全なメンバーシップ情報を取得するには、両方のデータベースを確認してください。また、+ または - で始まる 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 に答える