【发布时间】:2011-08-08 22:56:46
【问题描述】:
我最近开始为我的 python 脚本使用 ConfigParser() 来为配置文件添加一些功能。我知道如何使用它,但我有一个问题。我的脚本需要以 root 用户身份运行,使用 sudo。配置文件位于~/.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,所以它找不到配置文件。
【问题讨论】:
-
您是否使用
os.getuid()获取真实用户(而不是有效用户)并从中计算出主目录?还是您只是使用os.path.expanduser()? -
我正在使用
os.path.expanduser("~/")。我使用os.getuid()因为脚本必须以 root 身份运行。所以它会检查以确保你是 root,如果你不是它,它会吐出一条错误消息并退出。 -
@JMariz:既然扩展用户不起作用,你为什么要使用它?
-
好吧,假设我是另一台机器上的用户
myuser2。我希望它能够在其他人的计算机上运行。所以它需要找到 ~/ 目录。所以它需要能够自动检测用户的主目录。但是作为 sudo 它不能这样做,因为用户已更改为 root。 -
并非如此。概念是一样的。我只需要找到有效用户的主路径,这就是原始问题所要求的。
标签: python configuration root sudo