Мне было интересно, возможно ли иметь позиционный аргумент после аргумента с необязательным параметром. В идеале последний аргумент, введенный в командную строку, всегда применяется к "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()
Я хотел бы, чтобы оба этих вызова smelletest применялись к testname, а во втором - ошибка.
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
Я понимаю, что перенос позиционного аргумента на фронт приведет к правильному поведению необязательного параметра, однако это не совсем тот формат, который я ищу. Флаг выбора выглядит привлекательной альтернативой, однако он выдает ошибку вместо игнорирования непревзойденного элемента.
EDIT: Я нашел хакерский путь вокруг этого. Если у кого-то будет более приятное решение, я был бы признателен.
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 = ''