Ich wollte verschiedene Subparser in einem Skript definieren, wobei beide Optionen von einem gemeinsamen Parent erben, aber mit unterschiedlichen Standardwerten. Es funktioniert jedoch nicht wie erwartet.argparse - Parser, Subparsers und Standardwerte kombinieren
Hier ist, was ich getan habe:
import argparse
# this is the top level parser
parser = argparse.ArgumentParser(description='bla bla')
# this serves as a parent parser
base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument('-n', help='number', type=int)
# subparsers
subparsers = parser.add_subparsers()
subparser1= subparsers.add_parser('a', help='subparser 1',
parents=[base_parser])
subparser1.set_defaults(n=50)
subparser2 = subparsers.add_parser('b', help='subparser 2',
parents=[base_parser])
subparser2.set_defaults(n=20)
args = parser.parse_args()
print args
Als ich das Skript von der Befehlszeile ausführen, das ist, was ich bekommen:
$ python subparse.py b
Namespace(n=20)
$ python subparse.py a
Namespace(n=20)
, Anscheinend ist der zweite set_defaults
überschreibt die erste in der Elternteil. Da es in der argparse-Dokumentation (die ziemlich detailliert ist) nichts darüber gab, dachte ich, dies könnte ein Fehler sein.
Gibt es dafür eine einfache Lösung? Ich könnte die Variable args
danach überprüfen und None
Werte mit den beabsichtigten Standardeinstellungen für jeden Subparser ersetzen, aber das war es, was ich argarse für mich tun wollte.
Dies ist übrigens Python 2.7.
Danke, vermutete ich so viel. Ich beschloss, die Standardwerte nach dem Parsen von Argumenten zu behandeln. – erickrf