Argparse subparser:在命令列表中隐藏metavar

时间:2012-11-16 19:58:23

标签: python argparse

我在我的程序中使用Python argparse模块来执行命令行子命令。我的代码基本上是这样的:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title="subcommands", metavar="<command>")

subparser = subparsers.add_parser("this", help="do this")
subparser = subparsers.add_parser("that", help="do that")

parser.parse_args()

运行“python test.py --help”时,我想列出可用的子命令。目前我得到了这个输出:

usage: test.py [-h] <command> ...

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

subcommands:
  <command>
    this      do this
    that      do that

我可以以某种方式删除子命令列表中的<command>行并仍将其保留在使用行中吗?我试图将help = argparse.SUPPRESS作为add_subparsers的参数,但这只是隐藏了帮助输出中的所有子命令。

1 个答案:

答案 0 :(得分:10)

我通过添加一个新的HelpFormatter解决了这个问题,只是在格式化PARSER操作时删除该行:

class SubcommandHelpFormatter(argparse.RawDescriptionHelpFormatter):
    def _format_action(self, action):
        parts = super(argparse.RawDescriptionHelpFormatter, self)._format_action(action)
        if action.nargs == argparse.PARSER:
            parts = "\n".join(parts.split("\n")[1:])
        return parts