我想知道是否可以在具有可选参数的参数后面跟随一个位置参数。理想情况下,输入到命令行中的最后一个参数将始终应用于'testname'。
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs='+')
args = parser.parse_args()
我希望这两个调用都能对testname应用smoketest测试,但第二个调用会导致错误。
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
我意识到将位置参数移至开头会导致可选参数的正确行为,但这不完全是我要寻找的格式。choices标志看起来是一个有吸引力的替代方案,然而它会抛出错误而不是忽略不匹配的项。
编辑: 我已经找到了一个临时解决办法。如果有更好的解决方案,我将不胜感激。
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs=argparse.REMAINDER)
args = parser.parse_args()
if not args.testname:
args.testname = args.release
args.release = ''