Есть ли чистый способ проверить, существует ли данный пользователь на компьютере через python? - PullRequest
2 голосов
/ 02 августа 2011

В настоящее время я использую pwd.getpwall (), который показывает мне всю базу паролей.Но я просто хочу учетные записи пользователей компьютера.И с использованием getpwall () я не могу сделать это ...

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

, так как pwd.getpwall () возвращает список объектов.И если бы я хотел проверить, существует ли пользователь, я должен был бы сделать цикл.Я предполагаю, что есть более простой способ сделать это.

Ответы [ 3 ]

8 голосов
/ 02 августа 2011

В на той же странице руководства :

pwd.getpwnam(name)

Возвращает запись базы данных паролей для данного имени пользователя.

Thisэто результат для существующего и несуществующего пользователя:

>>> 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 ).

1 голос
/ 02 августа 2011

pwd.getpwnam повышает KeyError, если пользователь не существует:

def getuser(name):
    try:
        return pwd.getpwnam(name)
    except KeyError:
        return None
0 голосов
/ 02 августа 2011

Вы можете использовать что-то вроде:

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

Сохраните список и просто проверьте на username in list

...