首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用文件存储optparse参数

使用文件存储optparse参数
EN

Stack Overflow用户
提问于 2009-12-10 19:35:11
回答 5查看 5.4K关注 0票数 16

我使用optparse已经有一段时间了,我想添加从配置文件加载参数的功能。

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

做这件事最优雅的方式是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-10 20:23:43

我同意S.Lott使用配置文件的想法,但我建议使用内置的ConfigParser (3.0中的configparser)模块来解析它,而不是使用自制的解决方案。

下面是一个简短的脚本,它演示了ConfigParser和optparse的实际应用。

代码语言:javascript
复制
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()

输出:

代码语言:javascript
复制
(<Values at 0x2182c88: {'flag': 'japan.png', 'language': 'Japanese'}>, [])

使用“parser.py --language=French”运行:

代码语言:javascript
复制
(<Values at 0x2215c60: {'flag': 'japan.png', 'language': 'French'}>, [])

帮助是内置的。使用“parser.py --help”运行:

代码语言:javascript
复制
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

配置文件:

代码语言:javascript
复制
[Localization]
language=Japanese
flag=japan.png
票数 23
EN

Stack Overflow用户

发布于 2009-12-11 05:00:38

您可以使用argparse模块来实现此目的:

代码语言:javascript
复制
>>> 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

票数 7
EN

Stack Overflow用户

发布于 2009-12-10 19:40:56

这就是set_defaults函数的用途。http://docs.python.org/library/optparse.html#optparse.OptionParser.set_defaults

创建一个作为缺省值字典的文件。

代码语言:javascript
复制
{ 'arg1': 'this',
'arg2': 'that'
}

然后读取该文件,对其求值以将文本转换为字典,并将该字典作为参数提供给set_defaults

如果您真的担心eval,那么对这个文件使用JSON (或YAML)表示法。或者你甚至可以创建一个.INI文件,并使用configparser来获取你的默认设置。

或者,您可以使用简单的赋值语句和exec列表。

配置文件。

代码语言:javascript
复制
arg1 = 'this'
arg2 = 'that'

正在读取配置文件。

代码语言:javascript
复制
defaults= {}
with open('defaults.py','r') as config
    exec config in {}, defaults
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1880404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档