以root身份运行Python脚本(使用sudo)-有效用户的用户名是什么?

| 我最近开始对我的python脚本使用ConfigParser()来为配置文件添加一些功能。我知道如何使用它,但是有问题。我的脚本需要使用sudo以root用户身份运行。配置文件位于“ 0”中,但是当您以sudo身份运行脚本时,它会临时将用户更改为root用户,因此找不到配置文件。我想要做的是获取有效用户的配置文件,以便它获取
/home/myuser/.config/scriptconfig/config.cfg
而不是
/root/.config/scriptconfig/config.cfg
(不存在)。 我需要脚本能够在不同的机器上运行,而不仅仅是我的。所以我需要获得有效用户的主目录 这是我尝试使用的代码示例:
import os, ConfigParser
config = ConfigParser.RawConfigParser()
homepath = os.path.expanduser(\"~/\")
configpath = homepath + \".config/scriptconfig/config.cfg\"
config.read(configpath)
get = config.get(\'Config\', \'Example\')
print get
它应该从配置文件中打印
example
的值,但是当以sudo运行时,路径为
/home/root
,因此找不到配置文件。     
已邀请:
如果使用sudo(
sudo myscript.py
)运行脚本,则环境变量
$USER
将是
root
,环境变量
$SUDO_USER
将是执行命令
sudo myscript.py
的用户的名称。以下只是对CédricJulien上一篇文章的澄清。请考虑以下情形: linux用户“ 11”已登录到系统并拥有sudo特权。他编写了以下名为
myscript.py
的python脚本:
    #!/usr/bin/python
    import os
    print os.getenv(\"USER\")
    print os.getenv(\"SUDO_USER\")
然后,他用
chmod +x myscript.py
使脚本可执行,然后使用以下命令以sudo特权执行他的脚本:
sudo ./myscript.py
该程序的输出将是(使用python 2.x.x):
    root
    bob
如果bob使用以下命令运行程序sans sudo特权
./myscript.py
他将获得以下输出:
    bob
    None
    
如果要获取在启动sudo命令之前登录的用户,它将存储在SUDO_USER环境变量中。
import os
sudo_username = os.getenv(\"SUDO_USER\")
home_dir = \"/home/\" + sudo_username
您还具有SUDO_UID和SUDO_GID作为用户ID和组ID。     
这不起作用。
homepath = os.path.expanduser(\"~/\")
所以不要使用它。 你要这个。
username= os.environ[\"LOGNAME\"]
homepath = os.path.expanduser(\"~\"+username+\"/\")
http://docs.python.org/library/os.html#os.getlogin 也许这。
 username= pwd.getpwuid(os.getuid())[0]
 homepath = os.path.expanduser(\"~\"+username+\"/\")
    

要回复问题请先登录注册