我现在一直在使用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)
您可以使用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.
| 归档时间: |
|
| 查看次数: |
5045 次 |
| 最近记录: |