Python; argparse;如何指定位置参数的位置 [英] Python; argparse; how to specify position of positional arguments
问题描述
如何指定位置参数的位置?
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屋!