![](/img/trans.png)
[英]How do I avoid creating folders as root when running a python script under sudo?
[英]Running Python script as root (with sudo) - what is the username of the effective user?
我最近开始为我的python脚本使用ConfigParser(),以为它们添加一些配置文件功能。 我知道如何使用它,但是有问题。 我的脚本需要使用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
因此找不到配置文件。
如果使用sudo( sudo myscript.py
)运行脚本,则环境变量$USER
将是root
,环境变量$SUDO_USER
将是执行命令sudo myscript.py
的用户的名称。 以下只是对CédricJulien上一篇文章的澄清。 请考虑以下情形:
linux用户bob
登录到系统并拥有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.xx):
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+"/")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.