2011-10-14 26 views

回答

23

你可以使用pwd.getpwnam()

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

你可以只解析/etc/passwd,它存儲在那裏。

+6

它可能存儲在那裏,或者在NIS中,或在LDAP中,或者在任何其他有nSwitch模塊的源中。這就是爲什麼我們有以'getpw'開頭的API--這樣你就沒有錯誤,因爲你在一個使用(比如說)NIS存儲用戶信息的系統上手動解析'/ etc/passwd'。 – mkj

+0

mkj:謝謝!不知道NIS和LDAP。 – vines

5

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') 
15

假設你想要的是與用戶ID爲您的程序關聯的用戶名字符串,請嘗試:

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

使用os.geteuid()來獲取有效的UID,而不是,如果這種差異對你很重要。

使用pw_gecos而不是pw_name來獲取「真實姓名」,如果它填充到您的系統上。

相關問題