2009-07-21 92 views
8

我想使用Python將組ID分配給相應的組名。該例程必須適用於類Unix操作系統(Linux和Mac OS X)。通過組名得到組ID(Python,Unix)

這是我迄今發現

>>> import grp 
>>> for g in grp.getgrall(): 
...  if g[0] == 'wurzel': 
...   print g[2] 

回答

15

如果你讀了grp module documentation你會看到grp.getgrnam(組名)將返回從組數據庫,這是一個元組類對象一個條目。

>>> import grp 
>>> groupinfo = grp.getgrnam('root') 
>>> print groupinfo[2] 
0 
>>> print groupinfo.gr_gid 
0 

其他條目的名稱,加密密碼(一般爲空,如果使用shadow文件,這將是一個虛擬值)和所有組成員:您可以通過索引或屬性訪問信息名。這工作得很好任何Unix系統上,包括我的Mac OS X的筆記本電腦:

>>> import grp 
>>> admin = grp.getgrnam('admin') 
>>> admin 
('admin', '*', 80, ['root', 'admin', 'mj']) 
>>> admin.gr_name 
'admin' 
>>> admin.gr_gid 
80 
>>> admin.gr_mem 
['root', 'admin', 'mj'] 

該模塊還提供了一個方法來獲得由GID條目,因爲你發現,遍歷數據庫中所有條目的方法:

>>> grp.getgrgid(80) 
('admin', '*', 80, ['root', 'admin', 'mj']) 
>>> len(grp.getgrall()) 
73 

最後但並非最不重要的,蟒蛇提供了類似的功能,以取得該密碼和影子文件的信息,在pwdspwd模塊,其中有一個類似的API。

5

grp.getgrnam(name)

grp.getgrnam(name)

返回對於給定的組名組數據庫條目。如果找不到條目,​​則會引發KeyError。

組數據庫條目被報告爲元組類對象,其屬性對應的組結構的成員:

Index Attribute Meaning 

0 gr_name  the name of the group 
1 gr_passwd the (encrypted) group password; often empty 
2 gr_gid the numerical group ID 
3 gr_mem all the group member’s user names 

數值組ID是在索引2,或第二從最後,或屬性gr_gid

root GID是0:

>>> grp.getgrnam('root') 
('root', 'x', 0, ['root']) 
>>> grp.getgrnam('root')[-2] 
0 
>>> grp.getgrnam('root').gr_gid 
0 
>>> 
+0

你也應該鏈接到http://docs.python.org/library/grp.html – Stobor 2009-07-21 08:19:00

+0

對。也許你可以在瀏覽器中滾動到文檔的頂部。 – gimel 2009-07-21 08:27:14