我使用optparse已经有一段时间了,我想添加从配置文件加载参数的功能。
到目前为止,我能想到的最好的就是一个带有硬编码参数的包装器批处理脚本……看起来很笨拙。
做这件事最优雅的方式是什么?
发布于 2009-12-10 20:23:43
我同意S.Lott使用配置文件的想法,但我建议使用内置的ConfigParser (3.0中的configparser)模块来解析它,而不是使用自制的解决方案。
下面是一个简短的脚本,它演示了ConfigParser和optparse的实际应用。
import ConfigParser
from optparse import OptionParser
CONFIG_FILENAME = 'defaults.cfg'
def main():
config = ConfigParser.ConfigParser()
config.read(CONFIG_FILENAME)
parser = OptionParser()
parser.add_option("-l",
"--language",
dest="language",
help="The UI language",
default=config.get("Localization", "language"))
parser.add_option("-f",
"--flag",
dest="flag",
help="The country flag",
default=config.get("Localization", "flag"))
print parser.parse_args()
if __name__ == "__main__":
main()输出:
(<Values at 0x2182c88: {'flag': 'japan.png', 'language': 'Japanese'}>, [])使用“parser.py --language=French”运行:
(<Values at 0x2215c60: {'flag': 'japan.png', 'language': 'French'}>, [])帮助是内置的。使用“parser.py --help”运行:
Usage: parser.py [options]
Options:
-h, --help show this help message and exit
-l LANGUAGE, --language=LANGUAGE
The UI language
-f FLAG, --flag=FLAG The country flag配置文件:
[Localization]
language=Japanese
flag=japan.png发布于 2009-12-11 05:00:38
您可以使用argparse模块来实现此目的:
>>> open('args.txt', 'w').write('-f\nbar')
>>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
>>> parser.add_argument('-f')
>>> parser.parse_args(['-f', 'foo', '@args.txt'])
Namespace(f='bar')它可能包含在stdlib中,请参阅pep 389。
发布于 2009-12-10 19:40:56
这就是set_defaults函数的用途。http://docs.python.org/library/optparse.html#optparse.OptionParser.set_defaults
创建一个作为缺省值字典的文件。
{ 'arg1': 'this',
'arg2': 'that'
}然后读取该文件,对其求值以将文本转换为字典,并将该字典作为参数提供给set_defaults。
如果您真的担心eval,那么对这个文件使用JSON (或YAML)表示法。或者你甚至可以创建一个.INI文件,并使用configparser来获取你的默认设置。
或者,您可以使用简单的赋值语句和exec列表。
配置文件。
arg1 = 'this'
arg2 = 'that'正在读取配置文件。
defaults= {}
with open('defaults.py','r') as config
exec config in {}, defaultshttps://stackoverflow.com/questions/1880404
复制相似问题