在Python的argparse模块中,如何禁用打印大括号中的子命令选择?

7 投票
2 回答
2063 浏览
提问于 2025-04-17 10:56

我想知道怎么能不显示那些用大括号括起来的子命令选项。举个例子,参考这个链接 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

你可以用自己的方法来替代ArgumentParser.print_usage(),这样就可以按照你想要的方式打印任何内容。如果你只是想去掉最后一行,可以先调用原来的方法,把结果保存到一个文件里,然后再只打印你想要的部分。

8

为了不让我的用户看到那种又大又丑的花括号包围的子命令列表,我简单地设置了子命令对象的 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 子类和不去调整你需要修改的内容的情况下,能得到的最接近的结果,这样做会比较麻烦。

撰写回答