【问题标题】:in Python and linux how to get given user's id [duplicate]在 Python 和 linux 中如何获取给定的用户 ID [重复]
【发布时间】:2011-10-14 15:37:19
【问题描述】:

有 os.getuid() “返回 当前 进程的用户 ID。”。但是如何找出任何给定用户的 ID?

【问题讨论】:

    标签: python linux


    【解决方案1】:

    你可以使用pwd.getpwnam():

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

    【讨论】:

      【解决方案2】:

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

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

      使用 os.geteuid() 来获取有效的 uid,如果这种差异对您很重要。

      使用 pw_gecos 而不是 pw_name 来获取“真实姓名”(如果它已在您的系统中填充)。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          你可以解析/etc/passwd,它存储在那里。

          【讨论】:

          • 它可能存储在那里,或者在 NIS 中,或者在 LDAP 中,或者在有 nsswitch 模块的任何其他源中。这就是为什么我们的 API 以 getpw 开头的原因——这样您就不会因为您在使用(例如)NIS 存储用户信息的系统上手动解析 /etc/passwd 而出现错误。
          • mkj:谢谢!不知道 NIS 和 LDAP。
          猜你喜欢
          • 2017-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2018-01-13
          • 2021-11-08
          • 2021-05-28
          相关资源
          最近更新 更多