繁体   English   中英

以root身份运行Python脚本(使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM