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?

220
jdborg 10 Okt. 2012 im 15:22

3 Antworten

Beste Antwort

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']
323
unutbu 10 Okt. 2012 im 11:28

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!

7
nickl- 28 Nov. 2012 im 02:19

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.

20
lichenbo 22 Sept. 2014 im 04:51