Optparse, stara wersja ignoruje wszystkie nierozpoznane argumenty i kontynuuje. W większości sytuacji nie jest to idealne i zostało zmienione w argparse. Ale jest kilka sytuacji, w których chcesz zignorować nierozpoznane argumenty i przeanalizować te, które określiłeś.
Na przykład:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()
$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar
Czy można to jednak zastąpić?
Odpowiedzi:
Zastąpić
z
Na przykład,
źródło
parse_known_args
parser.parse_args(None)
a nieparser.parse_args([])
w moich testach.parse_known_args
zamiast używaćparse_args
włączaniaArgumentParser
kodu w zakresieif __name__ == 'main':
(warunek, który dotyczyTrue
wszystkich komórek w notesie IPython ...), który znajduję, znacznie pomaga w opracowywaniu i testowaniu kodu, który chcę ostatecznie migrować do wywoływanego skryptu z linii poleceń)Możesz umieścić pozostałe części w nowym argumencie,
parser.add_argument('args', nargs=argparse.REMAINDER)
jeśli chcesz ich użyć.źródło
parse_args()
i nie wymagaparse_known_args()
(w Pythonie 2.7).Właściwie argparse wciąż „ignoruje”
_unrecognized_args
. Dopóki te „nierozpoznane” argumenty nie używają domyślnego prefiksu , nie usłyszysz żadnych skarg od parsera.Używając konfiguracji @ anutbu, ale ze standardem
parse.parse_args()
, gdybyśmy mieli uruchomić nasz program z następującymi argumentami.Będziemy mieć tę kolekcję danych o przestrzeni nazw do pracy.
Gdybyśmy chcieli
-
zignorować domyślny prefiks , moglibyśmy zmienić ArgumentParser i zdecydować, że+
zamiast tego użyjemy argumentu „nasze” rozpoznane.To samo polecenie wygeneruje
Włóż to do fajki i zapal go =)
nJoy!
źródło