Python 分组argparse子parser参数
我有一个脚本,它有多个命令,每个命令都使用add_subparser获取自己的一组必需和/或可选参数Python 分组argparse子parser参数,python,argparse,Python,Argparse,我有一个脚本,它有多个命令,每个命令都使用add_subparser获取自己的一组必需和/或可选参数 =->test.py -h usage: test.py [-h] <command> ... positional arguments: <command> Available Commands cmd1 Command 1 cmd2 Command 2 cmd3 Command 3 cmd4
=->test.py -h
usage: test.py [-h] <command> ...
positional arguments:
<command> Available Commands
cmd1 Command 1
cmd2 Command 2
cmd3 Command 3
cmd4 Command 4
optional arguments:
-h, --help show this help message and exit
=->test.py cmd1 -h
usage: test.py cmd1 [-h] --flag1 FLAG1
optional arguments:
-h, --help show this help message and exit
--flag1 FLAG1 Test flag
=->test.py cmd2 -h
usage: test.py cmd2 [-h] [--flag2 FLAG2]
optional arguments:
-h, --help show this help message and exit
--flag2 FLAG2 Test flag
=->test.py-h
用法:test.py[-h]。。。
位置参数:
可用命令
cmd1命令1
cmd2命令2
cmd3命令3
cmd4命令4
可选参数:
-h、 --帮助显示此帮助消息并退出
=->test.py cmd1-h
用法:test.py cmd1[-h]--flag1 flag1
可选参数:
-h、 --帮助显示此帮助消息并退出
--flag1 flag1测试标志
=->test.py cmd2-h
用法:test.py cmd2[-h][--flag2 flag2]
可选参数:
-h、 --帮助显示此帮助消息并退出
--flag2 flag2测试标志
我想以某种方式将这些命令分成若干组,以便用户看到如下内容:
=->test.py -h
usage: test.py [-h] <command> ...
First Group:
cmd1 Command 1
cmd2 Command 2
Second Group:
cmd3 Command 3
cmd4 Command 4
optional arguments:
-h, --help show this help message and exit
=->test.py-h
用法:test.py[-h]。。。
第一组:
cmd1命令1
cmd2命令2
第二组:
cmd3命令3
cmd4命令4
可选参数:
-h、 --帮助显示此帮助消息并退出
但是,看起来不像add_argument_group和add_subparser一起工作
有什么办法可以做到这一点吗?你是对的,参数组和子参数不能一起工作。这是因为子帕斯(或者说他们的名字)不是参数
sp=parser.add_subparsers(…)
命令创建一个参数,或者从技术上说是argparse.Action
子类的一个实例。这是一个位置参数。add\u parser
命令创建一个parser
对象(即调用argparse.ArgumentParser
),并将其及其名称(和别名)添加到此操作拥有的词典中。这些名称填充动作的选项
属性
该子parser
操作可能属于参数组,但由于此类操作只能有一个,因此它无法帮助您对帮助行进行分组
在某种程度上,您可以通过使用描述来控制帮助,并省略子parser的帮助
import argparse
description = """
First Group:
cmd1 Command 1
cmd2 Command 2
Second Group:
cmd3 Command 3
cmd4 Command 4"""
parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter)
sp = parser.add_subparsers(title='commands',description=description)
sp.add_parser('cmd1')
sp.add_parser('cmd2')
sp.add_parser('cmd3')
sp.add_parser('cmd4')
parser.print_help()
产生
1343:~/mypy$ python stack32017020.py
usage: stack32017020.py [-h] {cmd1,cmd2,cmd3,cmd4} ...
optional arguments:
-h, --help show this help message and exit
commands:
First Group:
cmd1 Command 1
cmd2 Command 2
Second Group:
cmd3 Command 3
cmd4 Command 4
{cmd1,cmd2,cmd3,cmd4}
-允许对argparse子命令进行分组
谈论做你想做的事。我提出的补丁并不琐碎。但是欢迎您测试它。我使用的是Python 3.6,这几乎可以正常工作。在结束示例输出的
{cmd1,cmd2,cmd3,cmd4}
行下面仍然有原始帮助输出的其余部分。关于如何抑制它有什么想法吗?我知道这是一个老评论,但是对于任何发现它的人来说,添加help=argparse.suppress到parser.add_subparsers()可以将命令隐藏在描述下面(python 3.9,还没有检查其他版本)