Ich versuche, ein optionales Argument für ein Skript, das entweder keine Werte oder 2 Werte, nichts anderes nehmen kann. Kannst du das mit argparse erreichen?argparse - erfordert entweder 2 Werte oder keine für ein optionales Argument
# desired output:
# ./script.py -a --> works
# ./script.py -a val1 --> error
# ./script.py -a val1 val2 --> works
Version 1 - akzeptiert 0 oder 1 Werte:
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs="?", const=True, action="store", help="do some action")
args = parser.parse_args()
# output:
# ./script.py -a --> works
# ./script.py -a val1 --> works
# ./script.py -a val1 val2 --> error
Version 2 - akzeptiert genau 2 Werte:
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs=2, action="store", help="do some action")
args = parser.parse_args()
# output:
# ./script.py -a --> error
# ./script.py -a val1 --> error
# ./script.py -a val1 val2 --> works
Wie kombinieren Sie diese 2 verschiedene Versionen, so dass das Skript 0 oder 2 Werte für das Argument akzeptiert, aber ablehnt wenn es nur 1 Wert hat?
mit dieser Lösung "./script.py" verhält sich genauso wie "./script.py -a" – xgord
@xgord: In beiden Fällen möchten Sie keinen Fehler. Sie möchten einen Fehler, wenn Sie './script.py -a foo' oder' ./script.py -a foo bar baz' und länger verwenden. –
@xgord: Diese Überprüfung ist * nicht * um den Fall './Script.py' zu behandeln, nur um einen Fehler zu erzeugen, wenn' -a' verwendet wurde, aber mit der falschen Anzahl von Argumenten. Was haben Sie in diesem Fall erwartet? –