Optparse, die alte Version ignoriert einfach alle nicht erkannten Argumente und fährt fort. In den meisten Situationen ist dies nicht ideal und wurde in Argparse geändert. Es gibt jedoch einige Situationen, in denen Sie nicht erkannte Argumente ignorieren und die von Ihnen angegebenen Argumente analysieren möchten.
Beispielsweise:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()
$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar
Gibt es sowieso etwas zu überschreiben?
3 Antworten
Ersetzen
args = parser.parse_args()
Mit
args, unknown = parser.parse_known_args()
Beispielsweise,
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])
print(args)
# Namespace(foo='BAR')
print(unknown)
# ['spam']
Tatsächlich "ignoriert" argparse immer noch _unrecognized_args
. Solange diese "nicht erkannten" Argumente nicht das Standardpräfix verwenden, werden Sie keine Beschwerden vom Parser hören.
Verwenden Sie die Konfiguration von @ anutbu, jedoch mit dem Standard parse.parse_args()
, wenn Sie unser Programm mit den folgenden Argumenten ausführen möchten.
$ program --foo BAR a b +cd e
Wir werden diese Namespaced-Datenerfassung haben, mit der wir arbeiten können.
Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')
Wenn wir wollten, dass das Standardpräfix -
ignoriert wird, können wir den ArgumentParser ändern und entscheiden, dass wir stattdessen ein +
für unsere "erkannten" Argumente verwenden.
parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')
Der gleiche Befehl wird erzeugt
Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')
Steck das in deine Pfeife und rauche es =)
NJoy!
Sie können die verbleibenden Teile mit parser.add_argument('args', nargs=argparse.REMAINDER)
in ein neues Argument einfügen, wenn Sie sie verwenden möchten.
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.