如何在python中获取sudo用户名?

如何在python中获取sudo用户名?,python,unix,Python,Unix,我正在尝试按如下方式运行我的脚本,并希望访问运行此脚本的sudo用户 :$sudo -u usergroup script.py 因此,这里我期望“usergroup”作为输出。 我试过的是 getpass:这将为您提供实际用户,而不是sudo用户 os.getenv 我正在使用下面的python版本 In [7]: sys.version Out[7]: '2.7.11 (default, Apr 25 2016, 09:27:56) \n[GCC 5.2.1 20150902

我正在尝试按如下方式运行我的脚本,并希望访问运行此脚本的sudo用户

:$sudo -u usergroup script.py
因此,这里我期望“usergroup”作为输出。 我试过的是

  • getpass:这将为您提供实际用户,而不是sudo用户

  • os.getenv

我正在使用下面的python版本

In [7]: sys.version
Out[7]: '2.7.11 (default, Apr 25 2016, 09:27:56) \n[GCC 5.2.1 20150902 (Red Hat 5.2.1-2)]'

In [8]: 
请帮忙。未能找到任何现有问题或解决方案。

您需要使用获取(euid,用于大多数访问检查)

然后,将返回值传递到以获取有关返回的uid的信息:

>>> import pwd
>>> pwd.getpwuid(os.geteuid())
pwd.struct_passwd(pw_name='root', pw_passwd='x', ...)
访问
pwd.getpwuid()
pw_name
属性(或[0])以获取有效用户的用户名

>>> pwd.getpwuid(os.geteuid()).pw_name
'root'
>>> pwd.getpwuid(os.geteuid())[0]
'root'

要获取有效的组信息,请使用+


您是否尝试在服务器上以sudo方式执行命令?或者只是获取有关sudo的信息?只是获取用于日志记录的信息。不知道您的问题是什么,代码运行良好。
sudo
扩展为切换用户和do。它可以像任何其他用户一样用于执行命令。可以使用
-u
指定用户。现在,默认值(如果没有提供-u)是
root
。对于我的用例来说,这是一个完美的解决方案,事实上,后面的一行代码
pwd.getpwuid(os.geteuid()).pw\u name
>>> import os
>>> os.geteuid()
0
>>> import pwd
>>> pwd.getpwuid(os.geteuid())
pwd.struct_passwd(pw_name='root', pw_passwd='x', ...)
>>> pwd.getpwuid(os.geteuid()).pw_name
'root'
>>> pwd.getpwuid(os.geteuid())[0]
'root'
>>> grp.getgrgid(os.getegid())
grp.struct_group(gr_name='root', gr_passwd='x', gr_gid=0, gr_mem=[])
>>> grp.getgrgid(os.getegid()).gr_name
'root'