Python argparse ignorer non comptabilisés arguments
Optparse, l'ancienne version ignore tous méconnu les arguments et les exploite. Dans la plupart des situations, ce n'est pas l'idéal et a été changé dans argparse. Mais il ya quelques situations où vous voulez ignorer les méconnu arguments et d'analyser ceux que vous avez spécifié.
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 de toute façon il le remplacer?
- Très pratique si vous êtes en train de rédiger un wrapper vers un autre programme, et que vous voulez capturer et modifier quelques arguments, mais passer le reste sur!
- Exactement pourquoi j'ai atterri ici @AlanDeSmet ! Je ne suis pas heureux d'essayer de faire quelque chose de fou 🙂
Vous devez vous connecter pour publier un commentaire.
Remplacer
avec
Par exemple,
parse_known_args
parser.parse_args(None)
plutôt queparser.parse_args([])
dans mes tests.parse_known_args
plutôt queparse_args
permet l'utilisation deArgumentParser
dans le code dans le champ d'application deif __name__ == 'main':
(une condition qui estTrue
pour toutes les cellules dans un IPython Notebook ... que je trouve très sida, le développement et les tests de code que je veux migrer vers un script appelé à partir d'une ligne de commande)unknown
est tout simplement de tableau et il n'est pas intégré dans la façon de convertir nice dictionnaire (que nous ne connaissons pas les types). Alternative: stackoverflow.com/a/37367814/207661.Vous pouvez vous met le reste des éléments dans une nouvelle dispute avec
parser.add_argument('args', nargs=argparse.REMAINDER)
si vous voulez les utiliser.parse_args()
et ne nécessite pas deparse_known_args()
(sur Python 2.7).Fait argparse encore "ignorer"
_unrecognized_args
. Tant que ces "non reconnus" arguments ne pas utiliser le préfixe par défaut vous permettra de ne pas entendre les plaintes de l'analyseur.À l'aide de @anutbu de la configuration, mais avec le standard
parse.parse_args()
, si nous exécutons notre programme avec les arguments suivants.Nous aurons des Espaces de collecte de données pour travailler avec.
Si nous voulions le préfixe par défaut
-
ignoré nous pourrions changer le ArgumentParser et de décider, nous allons utiliser un+
pour notre "reconnu" des arguments à la place.La même commande produit
Mettre cela dans votre pipe et la fumée =)
nJoy!