有没有干净的方法通过Python检查用户是否在计算机上存在?
目前我在使用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
这个操作符会自动循环检查某个项目是否在列表中(参考)。