考虑以下代码:
$ cat a.py
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_a = subparsers.add_parser('a', help='A')
parser_b = subparsers.add_parser('b', help='B')
parser_c = subparsers.add_parser('c', help='C')
args = parser.parse_args()
简单的调用:
$ python a.py --help
usage: a.py [-h] {a,c,b} ...
positional arguments:
{a,c,b}
a A
b B
c C
optional arguments:
-h, --help show this help message and exit
为什么位置参数列为{a,c,b}
而不是{a,b,c}
,尤其是如何解决此问题?我有6个子命令,帮助看起来很难看。
这是Python 2.7.7 FWIW。
答案 0 :(得分:1)
可以显示(打印),subparsers.choices
吗?它应该是OrderedDict
。
{}
来自.choices
的{{1}}属性。虽然这可以是任何可迭代的(列表,字典等),但当前subparsers
代码会生成argparse
,它应按照添加顺序显示密钥。
我不知道这种行为有什么变化,至少在过去的几年里没有。但我可以深入了解它的历史。
您可以通过提供OrderedDict
subparsers
值来更改显示,例如
metavar
http://bugs.python.org/issue9026
是将其设置为OrderedDict的错误修复。在2011年3月关闭。
答案 1 :(得分:0)