【问题】
一个python脚本,通过命令行传递参数,但是由于参数太多,所以想要通过一个单独的配置文件,比如config.ini之类的,传递进去,然后找到合适的解析函数,甚至是自己写解析函数,来实现参数传递。
【解决过程】
1.网上找了下,参考:
然后写了通过配置文件为json的格式,然后读取文件并解析出来参数配置,但是中间出错了,后来还是自己搞定了该问题,详细过程可参看:
【已解决】Python中解析Json文件出错:ValueError : No JSON object could be decoded –> Python中Json库不支持带BOM的UTF-8
2.解决了上述问题,自然,也就可以通过传递json文件进来,解析后,就可以得到参数了。
并且,尝试了一下,把原先某个变量值为字符串的“yes”,改为true,也是可以被正确解析为bool类型的True的。
所以,通过json来传递和解析得到变量值,还是很方便的。
【总结】
想要在Python中,通过配置文件传递命令行参数,可以通过将配置文件内容写成json格式,然后读取的时候,通过json.load,这样就可以实现参数传递和解析了。
参考代码如下:
cfgFile = open('config.json','r'); cfgData = cfgFile.read(); #print "type(cfgData)=",type(cfgData); #print "cfgFile=",cfgData; jsonCfg = json.loads(cfgData); #jsonCfg = json.loads(cfgData, encoding="utf-8"); #print "type(jsonCfg)=",type(jsonCfg); #print "jsonCfg=",jsonCfg; cfgDict = jsonCfg; #for key in cfgDict.keys() : # print type(key)," ",type(cfgDict[key]),", [",key,"]=",cfgDict[key]; # print "-----"
配置文件config.json为:
{ "startfromURL": "", "limit" : 0, "processComments": true, "maxXmlSize" : 2097152, "replMusicCfgFile": "", "modifiedPostPattern" : "modifiedPostPattern.txt" } |
注意,需要将配置文件存为ANSI编码的,如果其中包含非ANSI字符,比如中文字符,那最好存为UTF-8或者其他格式,然后在调用json.loads的时候,添加对应的encoding,指定解码格式。