【问题标题】:Python; argparse; how to specify position of positional argumentsPython;参数解析;如何指定位置参数的位置
【发布时间】:2015-06-19 02:57:25
【问题描述】:

如何指定位置参数的位置?

在下面的示例中,SCR 和 SCV 参数出现在可选参数的末尾,我希望它们出现在开头。

#!/usr/bin/python
import argparse

### Parse arguments ###
parser = argparse.ArgumentParser()
parser.add_argument("SCR",type=int)
parser.add_argument("SCV",type=int)
parser.add_argument("--itemid",nargs='?')
parser.add_argument("--tkt",nargs='?')
parser.add_argument("--rfc",nargs='?')
parser.add_argument("--state",nargs='?')
parser.add_argument("--vendor",nargs='?')
parser.add_argument("--application",nargs='?')
parser.add_argument("--submitter",nargs='?')
parser.add_argument("--assigneddev",nargs='?')
parser.add_argument("--manager",nargs='?')
parser.add_argument("--maasteps",nargs='?')
parser.add_argument("--reasonforfailure",nargs='?')
parser.add_argument("--assignedpm",nargs='?')
parser.add_argument("--release",nargs='?')
parser.add_argument("--erelease",nargs='?')
parser.add_argument("--testenvloaded",nargs='?')
parser.add_argument("--datetestloaded",nargs='?')
parser.add_argument("--dateint2loaded",nargs='?')
parser.add_argument("--tqadeploytime",nargs='?')
parser.add_argument("--prodenvloaded",nargs='?')
parser.add_argument("--dateprodloaded",nargs='?')
parser.add_argument("--proddeploytime",nargs='?')
parser.add_argument("--proddeployer",nargs='?')
args = parser.parse_args()



> scratch.py -h
usage: scratch.py [-h] [--itemid [ITEMID]] [--tkt [TKT]] [--rfc [RFC]]
                  [--state [STATE]] [--vendor [VENDOR]]
                  [--application [APPLICATION]] [--submitter [SUBMITTER]]
                  [--assigneddev [ASSIGNEDDEV]] [--manager [MANAGER]]
                  [--maasteps [MAASTEPS]]
                  [--reasonforfailure [REASONFORFAILURE]]
                  [--assignedpm [ASSIGNEDPM]] [--release [RELEASE]]
                  [--erelease [ERELEASE]] [--testenvloaded [TESTENVLOADED]]
                  [--datetestloaded [DATETESTLOADED]]
                  [--dateint2loaded [DATEINT2LOADED]]
                  [--tqadeploytime [TQADEPLOYTIME]]
                  [--prodenvloaded [PRODENVLOADED]]
                  [--dateprodloaded [DATEPRODLOADED]]
                  [--proddeploytime [PRODDEPLOYTIME]]
                  [--proddeployer [PRODDEPLOYER]]
                  SCR SCV

【问题讨论】:

  • 在传统的 UNIX 程序中,选项(argparse 称为“可选参数”)位于操作数(“位置参数”)之前。大多数现代程序会以任意顺序接受它们,但 argparse 仍然鼓励人们正确传递它们。你为什么要打败它?
  • 可选参数总是在命令行界面中的位置参数之前。为什么你需要这个与众不同?
  • 我只是认为它“读取”需要的参数首先而不是最后...
  • @MartijnPieters 总是? Git 让他们追上来。

标签: python argparse


【解决方案1】:

默认的usage 格式化程序将位置参数与可选参数分开,并在最后显示它们。在像这样的多行显示的情况下,位置被放在单独的行上。这就是你所看到的。

什么时候可以先解析位置。

解决这个问题的一个明显方法是提供您自己的使用字符串,但是有这么多参数我可以理解不想这样做。

https://stackoverflow.com/a/26986546/901925 (去年 11 月)有一个 HelpFormatter 补丁可以禁用这种重新排序。但正如所写,它仅适用于单行使用。多行使用稍后以相同的方法处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2021-02-18
    • 2011-05-27
    • 2018-12-22
    • 2014-01-12
    相关资源
    最近更新 更多