Python;argparse;如何指定位置参数的位置 [英] Python; argparse; how to specify position of positional arguments

查看:25
本文介绍了Python;argparse;如何指定位置参数的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How do I specify the position of a positional argument?

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

In my example below, the SCR & SCV arguments appear at the end of the optional arguments, I want them to appear at the beginning.

#!/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

推荐答案

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

The default usage formatter separates the positional arguments from the optionals, and displays them at the end. In the case of multiline displays like this, the positionals are put on a separate line. That is what you are seeing.

何时可以首先解析位置.

When parsing positionals can come first.

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

An obvious way around this is to supply your own usage string, but with this many arguments I can understand not wanting to do so.

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

https://stackoverflow.com/a/26986546/901925 (last November) has a HelpFormatter patch that disables this reordering. But as written it only applies to single line usage. Multiline usage is handled later in the same method.

这篇关于Python;argparse;如何指定位置参数的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆