Python,argparse:具有不同参数数量的不同参数

时间:2013-07-24 19:37:37

标签: python argparse

我想编写一个名为sync的Python脚本,它有三种或四种操作模式,每种模式接收不同数量的参数。例如,

sync set_version <build> <version_number>
sync get_version <build>
sync has_started <build_1> <build_2> ... <build_n>

我已尝试为每种操作模式使用argparse的子分析器:

import argparse

parser = argparse.ArgumentParser(description='Build synchronization mechanism')
subparsers = parser.add_subparsers()

parser_get_version = subparsers.add_parser('get_version')
parser_get_version.add_argument('build')

parser_update_version = subparsers.add_parser('update_version')
parser_update_version.add_argument('build')
parser_update_version.add_argument('version')

args = parser.parse_args()
print args

问题是帮助消息没有反映每种操作模式的参数结构。相反,它只列出了操作模式:

usage: sync.py [-h] {get_version,update_version} ...

Build synchronization mechanism

positional arguments:
  {get_version,update_version}

optional arguments:
  -h, --help            show this help message and exit

如何强制argparse显示包含所有子分析器参数的完整帮助消息?

1 个答案:

答案 0 :(得分:1)

每个子命令都有自己的帮助;例如,尝试sync.py get_version --help

您必须自己覆盖帮助操作,并遍历子命令并为每个命令打印帮助。这需要一些具有内部属性的foibling:

class HelpAction(argparse._HelpAction):
     def __call__(self, parser, namespace, values, option_string=None):
         parser.print_help()

         for group in parser._subparsers._group_actions:
             group.choices.values()[0].print_help()

         parser.exit()

parser = argparse.ArgumentParser(description='Build synchronization mechanism',
                                 add_help=False)
parser.add_argument('-h', '--help', action=HelpAction, default=argparse.SUPPRESS,
    help=argparse._('show this help message and exit'))

你可能想要更多地调整输出。