2011-10-14 29 views

Trả lời

23

Bạn có thể sử dụng pwd.getpwnam():

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

Bạn chỉ có thể phân tích /etc/passwd, nó được lưu trữ ở đó.

+6

Nó có thể được lưu trữ ở đó hoặc trong NIS hoặc trong LDAP hoặc bất kỳ nguồn nào khác có mô-đun nsswitch. Đó là lý do tại sao chúng tôi có các API bắt đầu bằng 'getpw' - do đó bạn không có lỗi vì bạn đã phân tích cú pháp'/etc/passwd' bằng tay trên một hệ thống sử dụng (NIS) để lưu trữ thông tin người dùng. – mkj

+0

mkj: Cảm ơn! Không biết về NIS và 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

Giả sử những gì bạn muốn là chuỗi tên gắn liền với userid cho chương trình của bạn, hãy thử:

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

Sử dụng os.geteuid() để có được hiệu quả thay vì uid , nếu sự khác biệt đó quan trọng với bạn.

Sử dụng pw_gecos thay vì pw_name để lấy "tên thật" nếu được điền vào hệ thống của bạn.

Các vấn đề liên quan