Boolesches Argument für das Skript


78

In Python verstehe ich, wie int- und str-Argumente zu Skripten hinzugefügt werden können.

parser=argparse.ArgumentParser(description="""Mydescription""")
parser.add_argument('-l', type=str, default='info', help='String argument')
parser.add_argument('-dt', type=int, default ='', help='int argument')

Was ist das für Boolesche?

Grundsätzlich möchte ich meinem Skript ein Flag übergeben, das dem Skript mitteilt, ob eine bestimmte Aktion ausgeführt werden soll oder nicht.


2
Was ist los mit action='store_true'?
Rik Poggi

Welches Verhalten willst du mit Booleschen? (sagen wir mit '-v true' und '-v false'?)
kennytm

Antworten:


151

Sie können entweder das actionmit store_true| verwenden store_false, oder Sie können ein int verwenden und implizites Casting einen booleschen Wert überprüfen lassen.

Mit dem actionwürden Sie ein --foo=trueund --foo=false-Dargument nicht übergeben , sondern es einfach einschließen, wenn es auf true gesetzt würde.

python myProgram.py --foo

In der Tat denke ich, was Sie vielleicht wollen, ist

parser.add_argument('-b', action='store_true', default=False)

7
Ich glaube nicht, dass default=Falsees notwendig ist.
Paul Draper

24
@PaulDraper: Explizit ist besser als implizit.
Sberry

@PaulDraper Ich habe überprüft, dass es nicht benötigt wird, aber Sie können es als expliziten Wert setzen.
Caumons

@PaulDraper Ist die Standardeinstellung für boolean True nicht?
Aerin


7
import distutils.util
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true')

Beispiel, wie man es nennt:

$ ./myscript                # argp.on = 1
$ ./myscript --on=false     # argp.on = 0
$ ./myscript --on=False     # argp.on = 0
$ ./myscript --on=0         # argp.on = 0
$ ./myscript --on=1         # argp.on = 1
$ ./myscript -o0            # argp.on = 0
$ ./myscript -o false       # argp.on == 0

Ich sollte erwähnen, dass Sie das Argument auch an eine lokale Wrapper-Funktion binden können, um eine andere exakte Zeichenfolgenübereinstimmung zu handhaben, wenn Sie Werte wie "Ja" und "Nein" unterstützen möchten. Sie können auch versuchen, die Eingabe als yaml zu interpretieren, was auch Ja / Nein verarbeiten kann. Ich habe das schon eine Weile nicht mehr gemacht, und ich denke, in letzter Zeit habe ich mich gegenseitig ausschließende Argumente mit dem gleichen destWert, eins --no-optionmit action='store_false'und eins --optionmitaction='store_true'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.