我想知道是否有可能在一个带有可选参数的参数后面有一个位置参数.理想情况下,输入命令行的最后一个参数将始终应用于'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()
Run Code Online (Sandbox Code Playgroud)
我希望这两个调用都能将smoketest应用于testname,但第二个调用会导致错误.
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
Run Code Online (Sandbox Code Playgroud)
我意识到将位置参数移动到前面将导致可选参数的正确行为,但这不是我正在寻找的格式.选择标志看起来像一个有吸引力的替代方案,但它会抛出错误而不是忽略不匹配的项目.
编辑:我发现了一个hacky方式.如果有人有更好的解决方案我会很感激.
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 = ''
Run Code Online (Sandbox Code Playgroud)