我的脚本应该像thiks一样调用:
# python start.py --config=start.cfg
所以我有三个文件:
start.py
import argparse
import options
parser = argparse.ArgumentParser(prog='mystart')
parser.add_argument("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
args = parser.parse_args()
ConfigFile = args.filename
test = options.getTest()
print test
options.py
from ConfigReader import getConfigValue as getVal
def getTest():
Test = getVal('main', 'test')
return Test
ConfigReader.py
import os
import ConfigParser
def config():
cfg = ConfigParser.ConfigParser()
for f in ('default.cfg',):
if os.path.exists(f):
cfg.read(f)
return cfg
return None
def getConfigValue(Section, Option):
cfg = config()
if cfg.has_option(Section, Option):
return cfg.get(Section, Option)
else:
return None
正如您所见,我的配置文件在我的模块ConfigReader.py中进行了硬编码。 我怎样才能将我的var ConfigFile传递给我的模块?
这只是一个简单的例子。我有一堆文件,它们也应该访问这个变量。
全局变量是一个选项吗?还有另一种方式吗?
答案 0 :(得分:0)
start.py
...
options.ConfigFile = args.filename
...
options.py
from ConfigReader import getConfigValue as getVal, ConfigFile
def getTest():
Test = getVal('main', 'test')
return Test
ConfigReader.py
import os
import ConfigParser
ConfigFile='default.cfg'
def config():
cfg = ConfigParser.ConfigParser()
for f in set(['default.cfg',ConfigFile]):
if os.path.exists(f):
cfg.read(f)
return cfg
return None
def getConfigValue(Section, Option):
cfg = config()
if cfg.has_option(Section, Option):
return cfg.get(Section, Option)
else:
return None
答案 1 :(得分:0)
我为我找到了解决方案。
start.py
[...]
import ConfigRader
[...]
ConfigReader.LoadConfigFile(args.filename)
ConfigReader.py
[...]
_ConfigFile = None
def LoadConfigFile(File):
if not File:
File = 'default.cfg'
global _ConfigFile
_ConfigFile = File
[...]