![](/img/trans.png)
[英]python argparse different parameters with different number of arguments
[英]Python, argparse: different parameters with different number of arguments
我想编写一个名为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显示完整的帮助消息以及所有subparsers参数?
每个子命令都有自己的帮助。 例如,尝试sync.py get_version --help
。
您必须自己重写help操作,并遍历子命令并为每个命令打印帮助。 这需要一些内部属性:
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'))
您可能想对输出进行更多调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.