我有以下命令行工具:
import argparse
parser = argparse.ArgumentParser(description = "A cool application.")
parser.add_argument('positional')
parser.add_argument('--optional1')
parser.add_argument('--optional2')
args = parser.parse_args()
print args.positionals
python args.py
的输出是:
usage: args.py [-h] [--optional1 OPTIONAL1] [--optional2 OPTIONAL2]
positional
但是我希望:
usage: args.py [-h] positional [--optional1 OPTIONAL1] [--optional2 OPTIONAL2]
我怎么能重新排序?
答案 0 :(得分:1)
您要么必须提供自己的帮助格式化程序,要么指定明确的用法字符串:
parser = argparse.ArgumentParser(
description="A cool application.",
usage="args.py [-h] positional [--optional1 OPTIONAL1] [--optional2 OPTIONAL2]")
但是,帮助消息中的顺序不会影响您指定参数的顺序。 argparse
从左到右处理任何已定义的选项,然后从左到右为位置参数分配任何剩余的参数。在大多数情况下,选项和位置参数可以混合使用。
答案 1 :(得分:1)
相对于彼此,positionals
的顺序是固定的 - 这就是他们被称之为的原因。但是optionals
(标记的参数)可以以任何顺序出现,并且通常可以穿插在postionals中(当允许变量nargs
时存在一些实际约束。)
对于usage
行,argparse
将positionals
移动到列表的末尾,但这只是一个显示约定。
有关改变显示顺序的问题,但我认为通常不需要。如果必须更改显示顺序,则使用自定义usage
参数是最简单的选项。编程方式需要对帮助格式化器进行子类化并修改密钥方法。