Python 删除长子命令帮助输出?

Python 删除长子命令帮助输出?,python,python-2.7,argparse,Python,Python 2.7,Argparse,我正在使用生成CLI并使用该函数。这是个例外,--help的输出非常难看。它列出了整个语法中的所有命令。例如: usage: redid [-h] [--config CONFIG] [--verbose] [--show-curl] [--save [SAVE]] {setup,show-config,check-auth,version,get-profile,put-profile,delete-profile,get-profile-signature,lis

我正在使用生成CLI并使用该函数。这是个例外,
--help
的输出非常难看。它列出了整个语法中的所有命令。例如:

usage: redid [-h] [--config CONFIG] [--verbose] [--show-curl] [--save [SAVE]]

             {setup,show-config,check-auth,version,get-profile,put-profile,delete-profile,get-profile-signature,list-profiles,list-resources,ls-resources,get-resource-record,delete-resource,get-resource,upload-resource,get-resource-url}
             ...
我更喜欢更传统、更干净的输出,类似于:

usage: redid [OPTIONS...] Command ...

如何执行此操作?

尝试将
metavar
参数添加到子parser定义中,并且不给它任何值:

parser.add_subparsers(title="the_commands", metavar="")
:

参数说明:

  • metavar—在帮助中显示可用子命令的字符串;默认情况下,它是None,并以{cmd1,cmd2,…}的形式显示子命令
下面是一个示例,我不确定您是如何设置子解析器的,但是:

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo', action='store_true', help='foo help')
subparsers = parser.add_subparsers(help="sub-command help", metavar="sub command")
parser_a = subparsers.add_parser('a', help='a help')
parser_a.add_argument('bar', type=int, help='bar help')
parser_b = subparsers.add_parser('b', help='b help')
parser_b.add_argument('--baz', choices='XYZ', help='baz help')

>>> parser.print_help()
usage: PROG [-h] [--foo] sub command ...

positional arguments:
  sub command  sub-command help
    a          a help
    b          b help

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

这就删除了字符串,但是现在在一般语法中它根本没有提到sub命令。子帮助也有恼人的文本,但至少它比长字符串好。这是我能够解决类似问题的唯一方法。我为此回复了Bakuriu。它没有按预期工作。特别是在获取子命令帮助时,它只是将子命令帮助附加到此字符串,从而产生令人困惑的输出。@edA-qamart-ora-y我添加了一个示例,我不确定它是否修复了它,但请看一看。您可以将参数传递给构造函数…@Bakuriu,不,这不符合预期。它将长字符串保留在子命令帮助中。此外,这还破坏了sub命令的
--help
功能(它只是将子命令help附加到此用法字符串中)。。。如果您阅读有关的文档,您会发现
add\u parser
接受的参数与完全相同。问题不在于sub命令帮助,而是与基本帮助的组合形式。事实证明,我可以指定一个
prog
选项来
add_subparser
哪种方法可以解决这个问题。