Ich schreibe ein Skript, das zwei Argumente hat, die sich gegenseitig ausschließen, und eine Option, die nur mit einem dieser Argumente sinnvoll ist. Ich versuche, argparse zum Scheitern zu bringen, wenn du es mit dem Argument nennst, das keinen Sinn ergibt.Python argparse mit Abhängigkeiten
Um klar zu sagen:
-m -f
macht Sinn
-s
macht Sinn
-s -f
sollte
keine Argumente
Fehler auswerfen sind in Ordnung.Der Code, den ich habe, ist:
parser = argparse.ArgumentParser(description='Lookup servers by ip address from host file')
parser.add_argument('host', nargs=1,
help="ip address to lookup")
main_group = parser.add_mutually_exclusive_group()
mysql_group = main_group.add_argument_group()
main_group.add_argument("-s", "--ssh", dest='ssh', action='store_true',
default=False,
help='Connect to this machine via ssh, instead of printing hostname')
mysql_group.add_argument("-m", "--mysql", dest='mysql', action='store_true',
default=False,
help='Start a mysql tunnel to the host, instead of printing hostname')
mysql_group.add_argument("-f", "--firefox", dest='firefox', action='store_true',
default=False,
help='Start a firefox session to the remotemyadmin instance')
Welche nicht funktioniert, wie es ausspuckt
usage: whichboom [-h] [-s] [-m] [-f] host
eher als das, was ich erwarten würde:
usage: whichboom [-h] [-s | [-h] [-s]] host
oder sowas.
whichboom -s -f -m 116
wirft auch keine Fehler.
Dies ist eine funktionale Problemumgehung. Ich werde es einrichten, um mit ungültigen Optionen zu bombardieren, aber ich fühle, dass es ein Klotz ist. Wenn ich es heute Morgen nicht sortiere, werde ich die Entwickler ärgern, es könnte ein Fehler sein. – richo
Ich füge die mysql-Gruppe und eine weitere Option der wechselseitig_exklusiven_gruppe hinzu. Ich nehme an, ich habe die Option erwartet, die andere Gruppe auszuschließen, aber so funktioniert es nicht. Ich ging mit deiner anderen Lösung. – richo
'Argumentgruppe' und' sich gegenseitig ausschließende Gruppe' haben sehr unterschiedliche Zwecke und können nicht sinnvoll verschachtelt werden. 'argument_group' bedeutet nicht" irgendeines der oben genannten ". – hpaulj