解析配置文件,环境和命令行参数,以获取单个选项集合

问题:

Python的标准库具有配置文件解析configparser),环境变量阅读os.environ)和命令行参数解析argparse)的模块。我想写一个程序,所有这些,还有:

  • 有一个级联的选项值
     

    • default option values, overridden by
    • config file options, overridden by
    • environment variables, overridden by
    • command-line options.
  • 允许一个或多个在命令行上指定的配置文件位置与例如--config-file foo.conf,并读取(而不是或通常的配置文件)。这必须依靠上述级联。
  • 允许选项定义在一个地方确定配置文件和命令行的解析行为。
  • 将解析的选项合并为单个集合的选项值,以便程序的其余部分访问,而不关心他们来自哪里。

我所需要的一切显然在Python标准库中,但它们不能顺利地协同工作。
如何以最小的偏离Python标准库来实现这一点?

回答:

只要你对一个看起来像命令行的配置文件感到满意,argparse模块就不会这样。 (我认为这是一个优点,因为用户只需要学习一种语法。)将fromfile_prefix_chars设置为例如@,使得

my_prog --foo=bar

相当于

my_prog @baz.conf

如果@baz.conf是,

--foo
bar

您甚至可以通过修改argv自动查找代码foo.conf

if os.path.exists('foo.conf'):
    argv = ['@foo.conf'] + argv
args = argparser.parse_args(argv)

通过创建ArgumentParser的子类并添加convert_arg_line_to_args方法,可以修改这些配置文件的格式。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Parse config files, environment, and command-line arguments, to get a single collection of options

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

67 − 58 =