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

Jma*_*riz 14 python configuration sudo root

我最近开始使用ConfigParser()为我的python脚本添加一些功能给它们配置文件.我知道如何使用它,但我有一个问题.我的脚本需要使用sudo作为root用户运行.配置文件在,~/.config/scriptconfig/但是当您以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这样,它找不到配置文件.

小智 28

如果使用sudo(sudo myscript.py)运行脚本,则环境变量$USER将是root环境变量,并且环境变量$SUDO_USER将是执行命令的用户的名称sudo myscript.py.以下只是CédricJulien对上一篇文章的澄清.请考虑以下情形:

Linux用户bob登录系统并拥有sudo权限.他编写了以下名为的python脚本myscript.py:

    #!/usr/bin/python
    import os
    print os.getenv("USER")
    print os.getenv("SUDO_USER")
Run Code Online (Sandbox Code Playgroud)

然后,他使脚本可执行,chmod +x myscript.py然后使用以下命令执行带有sudo权限的脚本:

sudo ./myscript.py

该程序的输出将是(使用python 2.xx):

    root
    bob
Run Code Online (Sandbox Code Playgroud)

如果bob运行该程序没有sudo权限

./myscript.py

他将获得以下输出:

    bob
    None
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 5

这是行不通的。

homepath = os.path.expanduser("~/")
Run Code Online (Sandbox Code Playgroud)

所以不要使用它。

你要这个。

username= os.environ["LOGNAME"]
homepath = os.path.expanduser("~"+username+"/")
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/library/os.html#os.getlogin

或者也许是这个。

 username= pwd.getpwuid(os.getuid())[0]
 homepath = os.path.expanduser("~"+username+"/")
Run Code Online (Sandbox Code Playgroud)


Céd*_*ien 5

如果要在启动sudo命令之前获取已登录的用户,则将其存储在SUDO_USER环境变量中.

import os
sudo_username = os.getenv("SUDO_USER")
home_dir = "/home/" + sudo_username
Run Code Online (Sandbox Code Playgroud)

您还拥有用户ID和组ID的SUDO_UID和SUDO_GID.