Wie zu analysieren positionale Argumente mit führenden Minuszeichen (negative Zahl) mit argparse
Möchte ich parse eine notwendige, positions-argument enthält eine durch Kommata getrennte Liste von Integer-zahlen. Wenn der erste Integerwert enthält, einem führenden minus ('-') Zeichen, argparse beklagt:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('positional')
parser.add_argument('-t', '--test', action='store_true')
opts = parser.parse_args()
print opts
$ python example.py --test 1,2,3,4
Namespace(positional='1,2,3,4', test=True)
$ python example.py --test -1,2,3,4
usage: example.py [-h] [-t] positional
example.py: error: too few arguments
$ python example.py --test "-1,2,3,4"
usage: example.py [-h] [-t] positional
example.py: error: too few arguments
Ich habe Menschen gesehen, die vorschlagen, mit einigen anderen Zeichen neben -
da die flag-Zeichen, aber ich möchte lieber nicht tun. Gibt es eine andere Möglichkeit zum konfigurieren von argparse, dass --test
und -1,2,3,4
als gültige Argumente?
Nur falls jemand diese braucht, wenn --test nahm argument, das man tun könnte:
python example.py --test=-1,2,3,4
InformationsquelleAutor Inactivist | 2013-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie eine
--
in Ihre command-line arguments:Den double-dash hält argparse suchen für jede weitere optionale Schalter; es ist der defacto standard im Umgang mit genau dieser Anwendungsfall für die command-line-tools.
Das macht mir einfach
error: unrecognized arguments: --
(argparse unter Python 2.7.3)Keine derartigen Probleme unter Python 2.7.5.
InformationsquelleAutor Martijn Pieters
Aus der Dokumentation:
Seit
-1,2,3,4
hat nicht Aussehen einer negativen Zahl müssen Sie die "escape" mit der--
wie in den meisten *nix-Systemen.Eine andere Lösung wäre die Verwendung
nargs
für die positions-und pass die zahlen als durch ein Leerzeichen getrennt:Ausgabe:
Einen Dritten Weg zu erhalten, was Sie wollen, ist zu verwenden
parse_known_args
stattparse_args
.Fügen Sie nicht die positionelle argument, um den parser und parse es manuell statt:
Ergebnis:
Dies hat den Nachteil, dass Sie der Hilfe-text ist wenig informativ.
--
escape-Mechanismus. Vielen Dank für die Hilfe.Ich aktualisiert meine Antwort mit einer Dritten Methode zu ermöglichen
-1,2,3,4
positionellen Stil.InformationsquelleAutor Bakuriu