2010-03-29 80 views

回答

17

此答案建立在answer by Brian的基礎上。它增加了必要的try...except塊。用戶是否存在

檢查:如果組存在

import pwd 

try: 
    pwd.getpwnam('someusr') 
except KeyError: 
    print('User someusr does not exist.') 

檢查:

import grp 

try: 
    grp.getgrnam('somegrp') 
except KeyError: 
    print('Group somegrp does not exist.') 
9

要查找我的用戶ID(bagnew)在Unix下:

import pwd 
pw = pwd.getpwnam("bagnew") 
uid = pw.pw_uid 

pwd模塊的信息更多。

+1

這將引發'KeyError異常'如果找不到用戶名。 – 2010-03-29 18:59:16

+1

在這裏找到更多信息:http://www.doughellmann.com/PyMOTW/pwd/ – Elifarley 2010-03-30 18:38:55

+0

我現在已經添加了必要的'try ... except'塊的答案。 – 2013-03-01 23:24:26

0

我會解析/ etc/passwd的用戶名。用戶可能不一定有homedir的。

+2

這會失敗,例如,正在使用LDAP。 – 2010-03-29 21:15:44

+0

+1表示用戶可能不一定有本地人。 – 2010-03-29 21:19:41

+0

我的印象是並不是所有的linux版本都在/ etc/passwd文件中存儲用戶信息...... – Powertieke 2010-03-29 21:28:49

2

使用pwd,您可以使用pwd.getpwall()獲取所有可用用戶條目的列表。如果你不喜歡嘗試:/ except:blocks,這可以工作。

import pwd 

userid = "zomobiba" 
if userid in [x[0] for x in pwd.getpwall()]: 
    print "Yay" 
+2

好的,但沒有理由不喜歡'嘗試...除了'塊。使用'getpwnam'查詢單個用戶的效率要高於使用'getpwall'查詢所有用戶的效率。 – 2013-03-01 23:26:42

0

類似this answer,我這樣做:

>>> import pwd 
>>> 'tshepang' in [entry.pw_name for entry in pwd.getpwall()] 
True 
相關問題