使用文件存储optparse参数

puf*_*ish 15 python optparse

我现在一直在使用optparse,并希望添加从配置文件加载参数的功能.

到目前为止,我能想到的最好的是一个带有硬编码参数的包装批处理脚本......看起来很笨拙.

这样做最优雅的方法是什么?

Rya*_*rom 23

我同意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()
Run Code Online (Sandbox Code Playgroud)

输出:

(<Values at 0x2182c88: {'flag': 'japan.png', 'language': 'Japanese'}>, [])
Run Code Online (Sandbox Code Playgroud)

用" parser.py --language=French" 运行:

(<Values at 0x2215c60: {'flag': 'japan.png', 'language': 'French'}>, [])
Run Code Online (Sandbox Code Playgroud)

内置帮助.使用" 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
Run Code Online (Sandbox Code Playgroud)

配置文件:

[Localization]
language=Japanese
flag=japan.png
Run Code Online (Sandbox Code Playgroud)


jfs*_*jfs 7

您可以使用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')
Run Code Online (Sandbox Code Playgroud)

它可能包含在stdlib中,参见pep 389.

  • PEP 389获得批准,`argparse`已经是Python 2.7的一部分 (4认同)