Python;参数解析;如何指定位置参数的位置
Python; argparse; how to specify position of positional arguments
如何指定位置参数的位置?
在我下面的示例中,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
默认的 usage
格式化程序将位置参数与可选参数分开,并在末尾显示它们。在像这样的多行显示的情况下,位置被放在单独的一行上。这就是您所看到的。
当解析位置可以放在第一位时。
解决这个问题的一个明显方法是提供您自己的用法字符串,但是有了这么多参数,我可以理解不想这样做。
(去年 11 月)有一个禁用此重新排序的 HelpFormatter
补丁。但正如所写,它仅适用于单行用法。稍后在同一方法中处理多行用法。
如何指定位置参数的位置?
在我下面的示例中,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
默认的 usage
格式化程序将位置参数与可选参数分开,并在末尾显示它们。在像这样的多行显示的情况下,位置被放在单独的一行上。这就是您所看到的。
当解析位置可以放在第一位时。
解决这个问题的一个明显方法是提供您自己的用法字符串,但是有了这么多参数,我可以理解不想这样做。
(去年 11 月)有一个禁用此重新排序的 HelpFormatter
补丁。但正如所写,它仅适用于单行用法。稍后在同一方法中处理多行用法。