在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
你可以用自己的方法来替代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
子类和不去调整你需要修改的内容的情况下,能得到的最接近的结果,这样做会比较麻烦。