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)
这是行不通的。
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)
如果要在启动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.
| 归档时间: |
|
| 查看次数: |
25201 次 |
| 最近记录: |