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

注:オペレーターは、指定されたアイテムがリスト ( refin )内にあるかどうかを確認するために、とにかくループを実行します。

于 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 に答える