使用 argparse subparser 显示命令子组

Display subgroups of commands with argparse subparser

我目前正在 Python 中开发一个包含 ~40 个子命令的程序。解析器是使用 argparse 完成的。随着子命令数量的增加,搜索感兴趣的命令变得越来越复杂。目前显示如下。

$ pgrm -h
  Usage: pgrm [-h] [-v]  ...

  Blabla bla.

Main command arguments:
 -h, --help          show this help message and exit
 -v, --version       show program's version number and exit

Available sub-commands:

  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…


Usage example:
 'pgrm sub-command -h' for more information.

我想更改显示以显示类别(例如 updating/inserting/selecting)和关联的子命令。

$ pgrm -h
  Usage: pgrm [-h] [-v]  ...

  Blabla bla.

Main command arguments:
 -h, --help          show this help message and exit
 -v, --version       show program's version number and exit

Available sub-commands:

Updating
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
Selecting
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
Inserting
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…
  sub_cmd        Some description about the command…  

是否有任何解决方案可以在 argparser 中使用来实现这样的 CLI?

谢谢

几年前我探讨过这个问题

http://bugs.python.org/issue9341 允许对 argparse 子命令进行分组

如果我正确阅读了我建议的补丁,它只需要更改 _SubParsersAction class,而不需要进一步更改 HelpFormatterArgumentParser classes.