Ich werde das normale Verhalten von default
in argparse
(mit einer IPython interaktiven Sitzung) zeigen
In [32]: parser = argparse.ArgumentParser()
3 Aktionen definieren:
In [33]: parser.add_argument('-r', nargs=3, type=int, default=(1,2,3));
In [35]: parser.add_argument('-f', default='DEFAULT');
In [37]: parser.add_argument('-g', nargs='?', default='DEFAULT', const='const');
Die help
.Beachten Sie, dass alle Aktionen haben [], was darauf hinweist, daß sie optional sind:
In [39]: parser.print_help()
usage: ipython3 [-h] [-r R R R] [-f F] [-g [G]]
optional arguments:
-h, --help show this help message and exit
-r R R R
-f F
-g [G]
Wenn ohne argments genannt, alle Standardeinstellungen erscheinen im args
Namespace.
In [40]: parser.parse_args([]) # e.g python myprog.py
Out[40]: Namespace(f='DEFAULT', g='DEFAULT', r=(1, 2, 3))
Geben -r
mit 3 Zahlen (wie durch die nargs angegeben)
In [41]: parser.parse_args('-r 4 5 6'.split())
Out[41]: Namespace(f='DEFAULT', g='DEFAULT', r=[4, 5, 6])
einer der anderen Flags angeben. Beachten Sie die übrigen Standardwerte
In [42]: parser.parse_args('-f other'.split())
Out[42]: Namespace(f='other', g='DEFAULT', r=(1, 2, 3))
-g
mit nargs='?'
eine andere Option hat. Es kann ohne Argumente angegeben werden. In diesem Fall erhält es den const
Wert.
In [43]: parser.parse_args('-f other -g'.split())
Out[43]: Namespace(f='other', g='const', r=(1, 2, 3))
In [44]: parser.parse_args('-f other -g more'.split())
Out[44]: Namespace(f='other', g='more', r=(1, 2, 3))
Es ist nicht so eine 3-Wege-Option für nargs=3
. Sie geben entweder die 3 Werte an oder Sie verwenden -r
nicht. Wenn Sie zwischen 1) no-r-Flag, 2) r-Flag ohne Argumente und 3) r flat mit 3 Argumenten unterscheiden müssen, würde ich vorschlagen, Funktionalität in 2 Aktionen aufzuteilen, eine 'store_true' und andere, die die 3 Werte.
Defaults in argparse
kann eine komplizierte Angelegenheit sein, mit verschiedenen Möglichkeiten, sie zu setzen, Unterschiede zwischen String-und Nicht-String-Werte, sogar eine Möglichkeit, sie zu unterdrücken. Aber ich habe das grundlegende Verhalten gezeigt.
Wenn Sie mit program.py -r ausführen, erwartet die argparse einige Parameter. Wenn Sie das Flag -r überspringen, werden Standardwerte verwendet. – rammelmueller