298 votes

Python argparse ignore les arguments non reconnus

Optparse, l'ancienne version ignorait simplement tous les arguments non reconnus et continuait. Dans la plupart des situations, ce n'est pas idéal et cela a été changé dans argparse. Mais il y a quelques situations où vous voulez ignorer tous les arguments non reconnus et analyser ceux que vous avez spécifiés.

Par exemple :

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()

$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar

Y a-t-il un moyen d'écraser cela ?

530voto

unutbu Points 222216

Remplacer

args = parser.parse_args()

con

args, unknown = parser.parse_known_args()

Par exemple,

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']

31voto

lichenbo Points 375

Vous pouvez mettre les parties restantes dans un nouvel argument avec parser.add_argument('args', nargs=argparse.REMAINDER) si vous voulez les utiliser.

10voto

nickl- Points 1772

En fait, argparse "ignore" toujours _unrecognized_args . Aussi longtemps que ces arguments "non reconnus" ne pas utiliser le préfixe par défaut vous n'entendrez aucune plainte de l'analyseur syntaxique.

En utilisant la configuration de @anutbu mais avec le standard parse.parse_args() si nous devions exécuter notre programme avec les arguments suivants.

$ program --foo BAR a b +cd e

Nous aurons cette collection de données Namespaced pour travailler.

Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')

Si nous voulions que le préfixe par défaut - ignoré, nous pourrions changer l'ArgumentParser et décider d'utiliser un + pour nos arguments "reconnus" à la place.

parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')

La même commande produira

Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')

Mettez ça dans votre pipe et fumez le =)

nJoy !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X