有没有干净的方法通过Python检查用户是否在计算机上存在?

2 投票
3 回答
4030 浏览
提问于 2025-04-16 22:44

目前我在使用pwd.getpwall(),这个方法会显示整个密码数据库。但是我只想要电脑上的用户账户。使用getpwall()我无法做到这一点……

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

因为pwd.getpwall()返回的是一个对象列表。如果我想检查某个用户是否存在,我就得用循环来查找。我觉得应该有更简单的方法来实现这个。

3 个回答

0

你可以使用类似下面的代码:

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

把这个列表存起来,然后只需要检查一下是否有 username在列表里 就可以了。

1

pwd.getpwnam 这个函数会在找不到指定用户时,抛出一个 KeyError 错误。

def getuser(name):
    try:
        return pwd.getpwnam(name)
    except KeyError:
        return None
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这个操作符会自动循环检查某个项目是否在列表中(参考)。

撰写回答