如何为不同的动作构造argparse参数

时间:2014-01-28 16:49:05

标签: python argparse

如何构建Python argparse解析器以支持由顶级操作组织的不同参数,以及argparse的默认help功能区分不同的操作/选项组?

e.g。

$ myprog.py list --verbose
Listing records:
...
$ myprog.py run --iterations=10
Running
...
$ myprog.py help
usage: myprog.py [action]

positional arguments:
    action {list,run,help}
        list        Lists records.
        run         Process records.
        help        Show action help.
$ myprog.py help run
usage: myprog.py run [--iterations=N] [--verbose] [--skip]

optional arguments:
    --iterations N          Process N records.
    --verbose               Show extra messaging.
    --skip                  Skip previously seen IDs.

我认为这可能会得到parents功能的支持,但这似乎更适用于对选项组进行分组而不是单独的参数操作。

3 个答案:

答案 0 :(得分:1)

这是我使用argparse的解析器和子分析器来实现接近你想要的东西的一个例子,and that's a code to access SO by CLI ;-)

我还建议你看一下docopt

答案 1 :(得分:0)

你可以解析第一个项目,做出选择,然后为每个项目设置不同的参数解析器。如果要共享某些命令,则可以使用父功能在各种命令之间共享一些参数。

答案 2 :(得分:0)

parents是向一个或多个解析器添加参数的便捷方式。它不会影响解析或帮助。

add_argument_group是一种在help中对参数进行分组的方法。它可能是你需要的。但是,它不会影响参数的解析方式。默认分组是“位置”和“可选”(意思是“使用标志”)。

add_subparsers是一种分组参数及其解析的方法。有了它,您可以创建使用简单命令调用的新解析器。每个subparser都有自己的一组参数(和自己的帮助显示)

如果您想以完全不同的方式整理help,请考虑编写自己的usagedescription,并使用help=argparse.SUPPRESS取消默认帮助热线。< / p>

IPythonargparse的高级用户。在调用help之前,它会在sys.argv中检测到argparse,从而绕过默认帮助。