python - Mit argparse, übergeben Sie einen beliebigen string als argument eingesetzt werden, um im Skript
Wie definiere ich einen beliebigen string als optionales argument mit argparse?
Beispiel:
[user@host]$ ./script.py FOOBAR -a -b
Running "script.py"...
You set the option "-a"
You set the option "-b"
You passed the string "FOOBAR"
Im Idealfall würde ich gerne die position der Argumente keine Rolle. ich.e:
./script.py -a FOOBAR -b
== ./script.py -a -b FOOBAR
== ./script.py FOOBAR -a -b
In der BASH kann ich dies erreichen während der Verwendung getopts
. Nach Abwicklung aller gewünschten Schalter in einer case-Schleife, würde ich eine Zeile, die liest shift $((OPTIND-1))
, und von dort aus habe ich Zugriff auf alle restlichen Argumente unter Verwendung der standard -$1
, $2
, $3
usw...
Macht etwas, dass exisit für argparse?
- Haben Sie gehen Sie durch die argparse tutorial? Alles, was Sie beschreiben, ist es
- Das einzige Teil, das nicht diskutiert, wenn ich mich Recht erinnere ist die
nargs="*"
Verhalten (so dass eine positions-argument greifen kann, alle restlichen Argumente) - Die heikle Sache ist, dass wenn Sie nur
parse_args
, sobald es sieht, ein "positions" - argument, es hört auf zu suchen, für die anderen Argumente und sammelt die Argumente, die von der positions-argument am Ende. Diese Ordnung ist in den meisten Fällen, aber brechen würde seinen 1. und 3. Beispiel. - Auch dieser übergebene string optional sein sollte. Wenn ich ein Vanille -
add_argument("word")
es obligatorisch wird. - Es sieht aus wie argparse nicht nativ verarbeiten optional beliebige Argumente. Mit @jedwards Antwort, die ich bekommen kann die gewünschte Funktionalität außer, dass beliebige Zeichenfolge unbekannt ist argparse, also die Fähigkeit, eine beliebige Zeichenfolge unbekannt ist Benutzer aufrufen die
help
dialog.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genau das zu bekommen, was Sie suchen, ist der trick zu verwenden
parse_known_args()
stattparse_args()
:EDIT:
Der obige code zeigt die folgenden Informationen helfen:
Wenn Sie möchten, informieren den Anwender über die optional beliebige argument, die einzige Lösung, die ich denken kann, ist Unterklasse ArgumentParser und schreiben Sie es in sich.
Beispiel:
Zeigt die folgenden Informationen helfen:
Beachten Sie zusätzlich die
[FOO]
in der "usage" - Zeile und dieFOO
in der Hilfe unter "optional argument".