argparse subparser --help 输出不显示子解析器的描述

dav*_*idA 4 python argparse

如果我使用特定的帮助字符串创建子解析器,则用户运行时不会显示此字符串myprog command --help:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help="sub-command help")

parser_command = subparsers.add_parser("command", help="Issue a command")
parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

顶级帮助显示了此command子命令,并附有描述“发出命令”:

$ python prog.py --help
usage: prog.py [-h] {command} ...

positional arguments:
  {command}   sub-command help
    command   Issue a command

optional arguments:
  -h, --help  show this help message and exit
Run Code Online (Sandbox Code Playgroud)

但是子命令的帮助没有显示这个描述:

$ python prog.py command --help
usage: prog.py command [-h]

optional arguments:
  -h, --help  show this help message and exit
Run Code Online (Sandbox Code Playgroud)

我期望的是子命令的帮助打印出子命令的实际用途。即我希望在输出中的某处看到文本“发出命令”到python prog.py command --help.

有没有办法在子命令的帮助输出中包含此文本?是否有另一个子解析器属性可用于提供子命令的描述?

hpa*_*ulj 5

该add_parser方法接受ArgumentParser构造函数所做的(大部分)参数。

https://docs.python.org/3/library/argparse.html#sub-commands

很容易在add_subparsers段落中忽略这句话:

这个对象有一个方法 add_parser(),它接受一个命令名称和任何 ArgumentParser 构造函数参数,并返回一个可以像往常一样修改的 ArgumentParser 对象。

In [93]: parser=argparse.ArgumentParser()

In [94]: sp = parser.add_subparsers(dest='cmd',description='subparses description')

In [95]: p1 = sp.add_parser('foo',help='foo help', description='subparser description')
In [96]: p1.add_argument('--bar');
Run Code Online (Sandbox Code Playgroud)

主解析器的帮助:

In [97]: parser.parse_args('-h'.split())
usage: ipython3 [-h] {foo} ...

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

subcommands:
  subparses description

  {foo}
    foo       foo help
...
Run Code Online (Sandbox Code Playgroud)

子解析器的帮助:

In [98]: parser.parse_args('foo -h'.split())
usage: ipython3 foo [-h] [--bar BAR]

subparser description

optional arguments:
  -h, --help  show this help message and exit
  --bar BAR
...
Run Code Online (Sandbox Code Playgroud)