我正在尝试制作通用配置,从而配置解析器。有两个配置文件说A和B.我想根据硬编码列表解析部分并从中创建全局值。
以下是一个例子:
在配置文件中:
[section]
var1 = value1
var2 = value2
在全球范围内:
some_global_list = [ ["var1","var2"], ["var3","var4"] ]
在功能中通过ConfigParser解压缩此值:
configparser = ConfigParser.RawConfigParser()
configparser.read(some_config_filename)
for variables in some_global_list:
globals()[section]=dict()
for element in configparser.items(section):
globals()[section].update({element[0]:element[1]})
这很好用...... 然而。全局()的范围似乎仅限于功能,这显然不是我的意图。我只能在该函数中访问变量。
有人可以分享更简单的想法吗? 我知道我可能会将代码移到main而不用担心,但我认为这不是一个好主意。 我还想过制作一些发生器(对不起伪码):
在全球范围内:
for x in some_global_list:
globals()[x] = x
还尝试将此功能添加到功能:
for x in some_global_list[0]:
global x
但无处可去。
编辑:
经过以下讨论,这里是:
问题解决了这样:
功能:
def somefunction:
#(...)
configparser = ConfigParser.RawConfigParser()
configparser.read(some_config_filename)
temp_list=[]
for variables in some_global_list:
tmp=dict()
for element in configparser.items(section):
tmp.update({element[0]:element[1]})
temp_list.append (tmp)
return temp_list #this is pack for one file.
现在在主脚本
tmp=[]
for i,conf_file in enumerate([args.conf1,args.conf2,args.conf3]):
if conf_file:
try:
tmp.append([function(params...)])
except:
#handling here
#but since i needed those config names as global variables
for j,variable_set in enumerate(known_variable_names[i]):
globals()[variable_set] = tmp[i][j]
如此不幸的黑客主义者。但似乎工作。谢谢你的帮助。
我接受(如果可能的话)以下答案,因为它给了我一个好主意:)
答案 0 :(得分:0)
解决此问题的一种简单方法是在__init__.py
中的应用程序包中,您可以执行类似以下操作:
app_config = read_config()
def read_config():
configparser = ConfigParser.RawConfigParser()
configparser.read(some_config_filename)
return configparser.as_dict() #An imaginery method which returns the vals as dict.
可以将“app_config”变量导入应用程序中的任何其他模块。