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

Python Argparse subparser:在命令列表中隐藏metavar,python,argparse,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") subpar

在我的程序中,我正在为命令行子命令使用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()
import argparse
parser=argparse.ArgumentParser()
subparsers=parser.add_subparsers(title=“subcommands”,metavar=”“)
subparser=subparser.add_解析器(“this”,help=“do this”)
subparser=subparser.add_解析器(“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
用法:test.py[-h]。。。
可选参数:
-h、 --帮助显示此帮助消息并退出
子命令:
这个做这个
那样做吗

我是否可以删除子命令列表中的
行,并将其保留在用法行中?我尝试将help=argparse.SUPPRESS作为参数来添加_子PARSER,但这只是隐藏了帮助输出中的所有子命令。

我通过添加一个新的HelpFormatter解决了这个问题,如果格式化解析器操作,它只会删除行:

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

metavar
设置为
None
(或不设置)怎么样或者设置
metavar=''
…感谢您的回答!如果我将其设置为None,我只会得到一个所有命令的列表,如果我使用
metavar='
我会得到一个空行。在这两种情况下,我都在使用行中丢失了metavar。哦,我知道你现在在找什么了。不幸的是,我不知道如何实现它。我认为我需要实现一个定制的HelpFormatter来实现它,不幸的是,
Argparse
并没有真正公开足够的内部结构,使得创建定制的
HelpFormatter
对象变得容易。这是一个很棒的解决方案+谢谢你用简单的方法解决了一个恼人的问题。当添加到:
argparse.ArgumentParser(formatter\u class=SubcommandHelpFormatter)时,可以正常工作。