Ich frage mich, ob es möglich ist, ein Positionsargument einem Argument mit einem optionalen Parameter folgen zu lassen. Im Idealfall gilt das letzte in die Befehlszeile eingegebene Argument immer für 'Testname'.argparse optionales Argument vor Positionsargument
Ich möchte, dass beide Aufrufe smoketest auf testname anwenden, aber die zweite führt zu einem Fehler.
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
Ich stelle fest, dass die Positions Argument an die Front bewegt sich in die richtige Verhalten des optionalen Parameter führen würde, aber das ist nicht ganz das Format die ich suche. Das Auswahlflag sieht wie eine attraktive Alternative aus, es löst jedoch einen Fehler aus, statt das nicht übereinstimmende Element zu ignorieren.
EDIT: Ich habe einen hacky Weg um diese gefunden. Wenn jemand eine bessere Lösung hat, würde ich es begrüßen.
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 = ''
Danke für die Antwort. Ich stimme zu, dass es sauber gemacht werden kann, indem man entweder ein Präfix für das Argument testname hinzufügt oder, wie ich bereits erwähnte, sie vor dem anderen Argument aufliste. –