使用argparse定义参数的顺序 - Python

时间:2016-10-14 20:12:10

标签: python command-line command argparse args

我有以下命令行工具:

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]

我怎么能重新排序?

2 个答案:

答案 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行,argparsepositionals移动到列表的末尾,但这只是一个显示约定。

有关改变显示顺序的问题,但我认为通常不需要。如果必须更改显示顺序,则使用自定义usage参数是最简单的选项。编程方式需要对帮助格式化器进行子类化并修改密钥方法。