使用Python在sudo之后获取父用户

2024-10-02 12:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在Python中的sudo命令之后获得用户 例如,从shell我可以做:

# Shows root; *undesired* output
$ sudo whoami
root

# Shows parent user sjcipher, desired output
$ sudo who am i
sjcipher

在不使用外部程序的情况下,如何在Python中实现这一点?在


Tags: 用户命令outputsudorootshellamshows
3条回答

SUDO_用户环境变量在大多数情况下应可用:

import os

if os.environ.has_key('SUDO_USER'):
    print os.environ['SUDO_USER']
else:
    print os.environ['USER']

who am i^{}获取它的信息; 使用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

缺点是:Python只需要编译模块(3)。在

也许更好的选择是使用sudo提供的环境变量?例如:

^{pr2}$

所以使用类似os.environ['SUDO_USER']的方法可能会更好,这取决于你到底想做什么。在

根据设置,您可以使用已设置的环境变量。请注意,这可能不是在所有情况下都有效,但在你的情况下可能有效。应该在su之前返回原始用户。在

import os
print os.environ["USER"]

相关问题 更多 >

    热门问题