在shell脚本中,可能会执行以下操作:
myvar='default_value'
source myfile.sh
echo $myvar
其中myfile.sh类似于:
echo "myvar='special_value'" > myfile.sh
我知道在python中执行此操作的几种“安全”方法,但我能想到在Python中获得类似行为的唯一方法(尽管丑陋且不安全)如下:
myvar = 'default_value'
myimport = 'from %s import *' % 'myfile'
exec(myimport)
print(myvar)
其中myfile.py在./中,如下所示:
myvar = 'special_value'
我想我会最喜欢做类似的事情:
m.myvar = 'default_value'
m.update(__import__(myimport))
并更新m中的对象。我没有想到一个简单的方法来做这个而不用写东西来循环对象。
答案 0 :(得分:4)
有两种方法可以看待这个问题。
如何在python中读取键值对?有没有标准的方法来做到这一点?
和
如何为配置脚本提供完整的表达能力?
如果你的问题是第一个问题;那么最明显的答案是使用ConfigParser
模块:
from ConfigParser import RawConfigParser
parser = RawConfigParser({"myvar": "default_value"}) # Never use ConfigParser.ConfigParser!
parser.read("my_config")
myvar = parser.get("mysection", "myvar")
哪个会从看起来像普通INI样式配置的文件中读取值:
# You can use comments
[mysection]
myvar = special_value
对于第二个选项,当你真的想要为配置提供完全的python功能时(这种情况很少见,但有时是必要的),你可能不想使用import
,而应该使用{ {1}}:
execfile
反过来会从python脚本中读取;无论脚本如何派生它,它都会读取全局变量config = {}
execfile("my_config", config)
myvar = config.get("myvar", "default_value")
:
myvar