Optparse, l'ancienne version ignore simplement tous les arguments non reconnus et continue. Dans la plupart des situations, cela n’est pas idéal et a été modifié dans argparse. Cependant, il existe quelques situations dans lesquelles vous souhaitez ignorer 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
Est-il possible de remplacer cela?
Remplacer
args = parser.parse_args()
avec
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']
Vous pouvez mettre les parties restantes dans un nouvel argument avec parser.add_argument('args', nargs=argparse.REMAINDER)
si vous voulez les utiliser.
En fait, argparse "ignore" toujours _unrecognized_args
. Tant que ces arguments "non reconnus" n'utilisez pas le préfixe par défaut vous n'entendrez aucune plainte de l'analyseur.
En utilisant la configuration de @ anutbu mais avec la norme 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 avec laquelle travailler.
Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')
Si nous voulions ignorer le préfixe -
Par défaut, nous pourrions changer le paramètre ArgumentParser et décider d'utiliser à la place un +
Pour nos arguments "reconnus".
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 =)
nonJoy!