Zastanawiam się, czy możliwe jest zastosowanie argumentu pozycyjnego po argumencie z opcjonalnym parametrem. Najlepiej, jeśli ostatni argument wprowadzony w linii poleceń będzie zawsze stosowany w odniesieniu do "testname".argparse opcjonalny argument przed argumentem pozycyjnym
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()
Chciałbym, aby oba te wywołania miały być testowane, ale drugi powoduje błąd.
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
Zdaję sobie sprawę, że przesuwając pozycyjnym argumentu do przodu spowoduje prawidłowego zachowania opcjonalny parametr, jednak nie jest to całkiem format szukam. Flaga wyboru wygląda atrakcyjnie, ale zamiast ignorować niedopasowany element, generuje błąd.
EDYCJA: Znalazłem sposób hacky wokół tego. Jeśli ktokolwiek ma lepsze rozwiązanie, byłbym wdzięczny.
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 = ''
Dzięki za odpowiedź. Zgadzam się, że można to zrobić czysto zarówno poprzez dodanie prefiksu dla argumentu nazwa_testowa, lub jak wspomniałem tylko wymieniając je przed innym argumentem. –