【问题标题】:Defining the order of the arguments with argparse - Python使用 argparse 定义参数的顺序 - Python
【发布时间】:2017-02-24 08:46:22
【问题描述】:

我有以下命令行工具:

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]

我怎么能重新排序?

【问题讨论】:

  • 你还能用你想要的输出运行它吗?阅读 API,它说顺序与可选和位置参数无关紧要。 docs.python.org/3/howto/…

标签: python command-line command argparse args


【解决方案1】:

相对于彼此,positionals 的顺序是固定的 - 这就是它们被称为的原因。但是optionals(被标记的参数)可以以任何顺序出现,并且通常可以与后位词穿插(当允许可变长度nargs时存在一些实际限制。)

对于usage 行,argparsepositionals 移动到列表末尾,但这只是一个显示约定。

关于更改显示顺序的问题一直存在,但我认为通常不需要这样做。如果必须更改显示顺序,使用自定义 usage 参数是最简单的选项。编程方式需要继承帮助格式化程序并修改一个关键方法。

【讨论】:

    【解决方案2】:

    您要么必须提供自己的帮助格式化程序,要么指定明确的使用字符串:

    parser = argparse.ArgumentParser(
        description="A cool application.",
        usage="args.py [-h] positional [--optional1 OPTIONAL1] [--optional2 OPTIONAL2]")
    

    但是,帮助消息中的顺序不会影响您指定参数的顺序。 argparse 从左到右处理任何定义的选项,然后从左到右将任何剩余的参数分配给位置参数。在大多数情况下,选项和位置参数可以混合使用。

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 2013-03-30
      • 2012-02-20
      • 2020-10-12
      • 2015-07-25
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 2014-03-04
      相关资源
      最近更新 更多