在python argparse模块中,如何在大括号之间禁用打印子命令选项?

时间:2012-01-24 00:27:56

标签: python argparse

如何禁用打印子命令选项,大括号之间的选项?使用http://docs.python.org/dev/library/argparse.html#sub-commands处的示例,正​​常输出为:

usage:  [-h] {foo,bar} ...

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

subcommands:
{foo,bar}   additional help

我想要的是打印这个:

usage:  [-h] {foo,bar} ...

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

subcommands:

仅删除最后一行。

2 个答案:

答案 0 :(得分:6)

为了避免使用由数十个子命令组成的巨大的大括号列表来向我的用户发送垃圾邮件,我只需设置子命令对象的metavar属性即可。我的代码如下:

import argparse
parser = argparse.ArgumentParser(description='Stack Overflow example')
subs = parser.add_subparsers()
subs.metavar = 'subcommand'
sub = subs.add_parser('one', help='does something once')
sub = subs.add_parser('two', help='does something twice')
parser.parse_args()

使用单个-h参数运行此脚本的输出是:

usage: tmp.py [-h] subcommand ...

Stack Overflow example

positional arguments:
  subcommand
    one       does something once
    two       does something twice

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

结果并不完全是你所说的最佳理想情况,但我认为如果没有子类化argparse.ArgumentParser并覆盖你需要调整的东西,它可能是最接近的,这将是混乱的工作。

答案 1 :(得分:0)

使用您自己的方法覆盖ArgumentParser.print_usage()以打印任何内容,无论您想要什么。如果您要做的只是消除最后一行,请调用原始版本,捕获结果(通过将其发送到文件)并仅打印您想要的部分。