3

我目前正在用 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.

我想更改显示以显示类别(例如更新/插入/选择)和相关的子命令。

$ 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?

谢谢

4

1 回答 1

1

几年前我探讨过这个问题

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

如果我正确阅读了我提出的补丁,它只需要更改_SubParsersAction类,而不需要对HelpFormatterorArgumentParser类进行进一步更改。

于 2017-05-31T19:31:23.593 回答