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

标签 python argparse

如果我使用特定的帮助字符串创建子解析器,则当用户运行 myprog 命令 --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()

顶级帮助显示此命令子命令,旁边带有描述“发出命令”:

$ 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

但是子命令的帮助不显示此描述:

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

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

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

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

最佳答案

add_parser 方法接受(大多数)ArgumentParser 构造函数所接受的参数。

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

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

This object has a single method, add_parser(), which takes a command name and any ArgumentParser constructor arguments, and returns an ArgumentParser object that can be modified as usual.

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');

主解析器的帮助:

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
...

子解析器的帮助:

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
...

关于python - argparse subparser --help 输出不显示子解析器的描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194874/

相关文章:

python - python 中的 32 位 unicode

python - argparse - 每个操作不同的强制/可用参数

python - 为什么在大循环中使用按位运算时会得到这么长的运行时间?

python - 使用 optparse 调用函数

python - 如何测试依赖于 argparse 的 Python 类?

python - pandas:检查引用列表中的匹配值的系列,为每个匹配生成新记录

python - Babun 显示旧版本的 Python

python-2.7 - Python argparse 不带字符 -

Python 参数解析 : Mutually exclusive group with some compatible arguments

python - 将使用 argparse 的 python 脚本/模块导入到另一个 python 脚本中