【发布时间】:2016-12-18 18:22:52
【问题描述】:
我有一个解析可选 --list-something 选项的 python 选项解析器。 我还希望 --list-something 选项有一个可选参数(一个选项)
在这里使用参数default="simple" 不起作用,否则简单将永远
成为默认值,不仅是在给出 --list-something 时。
from optparse import OptionParser, OptionGroup
parser = OptionParser()
options = OptionGroup(parser, "options")
options.add_option("--list-something",
type="choice",
choices=["simple", "detailed"],
help="show list of available things"
)
parser.add_option_group(options)
opts, args = parser.parse_args()
print opts, args
上面的代码产生了这个:
[jens@ca60c173 ~]$ python main.py --list-something simple
{'list_something': 'simple'} []
[jens@ca60c173 ~]$ python main.py --list-something
Usage: main.py [options]
main.py: error: --list-something option requires an argument
[jens@ca60c173 ~]$ python main.py
{'list_something': None} []
但我希望这种情况发生:
[jens@ca60c173 ~]$ python main.py --list-something simple
{'list_something': 'simple'} []
[jens@ca60c173 ~]$ python main.py --list-something
{'list_something': 'simple'} []
[jens@ca60c173 ~]$ python main.py
{'list_something': None} []
我想要在 python 2.4 到 3.0 之前开箱即用的东西(不包括 3.0)
由于 argparse 仅在 python 2.7 中引入,这不是我可以使用的。
【问题讨论】:
-
我认为使用
argparse很容易做到这一点。我已经将argparse与python2.6 一起使用了——我不确定它还能工作多远…… -
感谢您的建议,但是我无法使用任何外部依赖项,因此我更新了我希望它在 python 2.4-3.0 上开箱即用的问题
标签: python default-value choice optparse optionparser