设置optionparser默认选择的选项时给出(Set a default choice for

2019-09-26 06:36发布

我有一个解析可选--list出头的选项蟒蛇选项解析器。 我也希望--list出头的选项有一个可选的参数(选项)

使用参数default="simple"并不在这里工作,否则简单的将永远是默认的,不仅当被赋予--list-东西。

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} []

但我想这hapen:

[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只介绍这是不是我可以使用。

Answer 1:

Optparse不具有容易这样做的任何选项。 相反,你必须为你的选项自定义回调。 当你的选项被解析的回调被触发,在这一点上,你可以检查剩余的参数传递给看到,如果用户把一个参数的选项。

检查出的文档的自定义回调部分,尤其是回调例如6:可变参数 。



Answer 2:

没有默认为蟒Optparser。
但是,您可以使用follwing -

# show help as default
if len(sys.argv) == 1:
  os.system(sys.argv[0] + " -h")
  exit()

这将运行与相同的脚本-h选项,并退出。
请注意 - 您将需要导入sys模块。



文章来源: Set a default choice for optionparser when the option is given