在使用Python完成sudo之后获取父级用户
我希望在Python中使用sudo
命令后获得父级用户例如,在shell中,我可以执行以下操作:
# Shows root; *undesired* output
$ sudo whoami
root
# Shows parent user sjcipher, desired output
$ sudo who am i
sjcipher
如何在不使用外部程序的情况下在Python中执行此操作?
who am i
从utmp(5)
得到它的信息; 用Python你可以用pyutmp访问信息;
这里有一个例子,改编自pyutmp
主页:
#!/usr/bin/env python2
from pyutmp import UtmpFile
import time, os
mytty = os.ttyname(os.open("/dev/stdin", os.O_RDONLY))
for utmp in UtmpFile():
if utmp.ut_user_process and utmp.ut_line == mytty:
print '%s logged in at %s on tty %s' % (utmp.ut_user, time.ctime(utmp.ut_time), utmp.ut_line)
$ ./test.py
martin logged in at Tue Jul 1 21:38:35 2014 on tty /dev/pts/5
$ sudo ./test.py
martin logged in at Tue Jul 1 21:38:35 2014 on tty /dev/pts/5
缺点:这是一个C模块(即它需要编译),只适用于Python 2(不是3)。
也许更好的选择是使用sudo
提供的环境变量? 例如:
[~]% sudo env | grep 1001
SUDO_UID=1001
SUDO_GID=1001
[~]% sudo env | grep martin
SUDO_USER=martin
因此,使用os.environ['SUDO_USER']
类的东西可能会更好,这取决于您正在尝试做什么。
在大多数情况下,SUDO_USER环境变量应该可用:
import os
if os.environ.has_key('SUDO_USER'):
print os.environ['SUDO_USER']
else:
print os.environ['USER']
如前所述,您可以使用getpass模块
>>> import getpass
>>> getpass.getuser()
'kostya'
链接地址: http://www.djcxy.com/p/79435.html
上一篇: Get parent user after sudo with Python
下一篇: How to determine what user and group a Python script is running as?