在Python和Linux中如何获取指定用户的ID

36

有一个函数os.getuid(),它“返回当前进程的用户 ID”。但是我如何找出任何给定用户的ID呢?

4个回答

41

您可以使用pwd.getpwnam()

In [5]: pwd.getpwnam('aix').pw_uid
Out[5]: 1004

38

假设你想要与你的程序相关联的用户ID的用户名字符串,请尝试:

import os
import pwd
pwd.getpwuid( os.getuid() ).pw_name

如果您关心差异,请使用os.geteuid()获取有效UID。

如果在您的系统上填写了“真实姓名”,请使用pw_gecos而不是pw_name来获取。


7

pwd:

import pwd
for p in pwd.getpwall():
    print p

pwd.struct_passwd(pw_name='_calendar', pw_passwd='*', pw_uid=93, pw_gid=93, pw_gecos='Calendar', pw_dir='/var/empty', pw_shell='/usr/bin/false')
pwd.struct_passwd(pw_name='_teamsserver', pw_passwd='*', pw_uid=94, pw_gid=94, pw_gecos='TeamsServer', pw_dir='/var/teamsserver', pw_shell='/usr/bin/false')
pwd.struct_passwd(pw_name='_update_sharing', pw_passwd='*', pw_uid=95, pw_gid=-2, pw_gecos='Update Sharing', pw_dir='/var/empty', pw_shell='/usr/bin/false')
pwd.struct_passwd(pw_name='_installer', pw_passwd='*', pw_uid=96, pw_gid=-2, pw_gecos='Installer', pw_dir='/var/empty', pw_shell='/usr/bin/false')
pwd.struct_passwd(pw_name='_atsserver', pw_passwd='*', pw_uid=97, pw_gid=97, pw_gecos='ATS Server', pw_dir='/var/empty', pw_shell='/usr/bin/false')
pwd.struct_passwd(pw_name='_ftp', pw_passwd='*', pw_uid=98, pw_gid=-2, pw_gecos='FTP Daemon', pw_dir='/var/empty', pw_shell='/usr/bin/false')

-5
您可以直接解析 /etc/passwd,用户信息就存储在那里。

10
它可能被存储在那里,或者在NIS中,或者在LDAP中,或者在任何其他使用nsswitch模块的源中。这就是为什么我们有以“getpw”开头的API的原因 - 这样你就不会因手动解析使用(例如)NIS存储用户信息的系统中的/ etc / passwd而出现错误。 - mkj
mkj:谢谢!我不知道NIS和LDAP。 - vines

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接