2

目前我正在使用 pwd.getpwall(),它显示了整个密码数据库。但我只想要计算机的用户帐户。并且使用 getpwall() 我无法做到这一点......

if 'foo' in pwd.getpwall():
     do stuff

因为 pwd.getpwall() 返回一个对象列表。如果我想检查用户是否存在,我将不得不做一个循环。我认为有一种更简单的方法可以做到这一点。

4

3 回答 3

9

手册的同一页

pwd.getpwnam(name)

返回给定用户名的密码数据库条目。

这是存在和不存在用户的结果:

>>> import pwd
>>> pwd.getpwnam('root')
pwd.struct_passwd(pw_name='root', pw_passwd='*', pw_uid=0, pw_gid=0, pw_gecos='System Administrator', pw_dir='/var/root', pw_shell='/bin/sh')
>>> pwd.getpwnam('invaliduser')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'getpwnam(): name not found: invaliduser'

因此你可以这样做:

try:
    pwd.getpwnam(name)
except KeyError:
    # Handle non existent user
    pass
else:
    # Handle existing user
    pass

注意:in操作员无论如何都会执行一个循环来检查给定项目是否在列表中(ref)。

于 2011-08-02T17:46:48.113 回答
1

pwd.getpwnamKeyError如果用户不存在,则引发 a :

def getuser(name):
    try:
        return pwd.getpwnam(name)
    except KeyError:
        return None
于 2011-08-02T17:48:44.533 回答
0

你可以使用类似的东西:

>>> [x.pw_name for x in pwd.getpwall()]

存储列表并检查username in list

于 2011-08-02T18:14:18.053 回答