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屋!