Optparse, l'ancienne version ignore simplement tous les arguments non reconnus et continue. Dans la plupart des situations, ce n'est pas idéal et a été changé dans argparse. Mais il y a quelques situations où vous souhaitez 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 de remplacer cela?
Réponses:
Remplacer
avec
Par exemple,
la source
parse_known_args
parser.parse_args(None)
plutôt queparser.parse_args([])
dans mes tests.parse_known_args
plutôt qu'autoriserparse_args
l'utilisation deArgumentParser
code dans le cadre deif __name__ == 'main':
(une condition quiTrue
concerne toutes les cellules d'un bloc-notes IPython ... que je trouve très utile pour le développement et le test du code que je souhaite éventuellement migrer vers un script appelé à partir d'une ligne de commande)Vous pouvez mettre les parties restantes dans un nouvel argument
parser.add_argument('args', nargs=argparse.REMAINDER)
si vous souhaitez les utiliser.la source
parse_args()
et ne nécessite pasparse_known_args()
(sur Python 2.7).En fait, argparse "ignore" toujours
_unrecognized_args
. Tant que ces arguments "non reconnus" n'utilisent 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.Nous aurons cette collection de données à espace de noms avec laquelle travailler.
Si nous voulions que le préfixe par défaut soit
-
ignoré, nous pourrions changer le ArgumentParser et décider que nous allons utiliser un+
pour nos arguments "reconnus" à la place.La même commande produira
Mettez ça dans votre pipe et fumez-le =)
nJoy!
la source