Argparse ordre incorrect des paramètres de position et facultatifs
-
27-10-2019 - |
Question
Pourquoi ne argparse analyser ces arguments?
--foo 1 2 3 bar
Utilisation
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')
parser.add_argument('bar')
qui donne l'erreur suivante:
erreur: trop peu d'arguments
Si je passe l'argument de la barre d'abord bien, cela fonctionne:
bar --foo 1 2 3
Maintenant, ce qui en soi est pas trop mal. Je peux vivre avec avoir les arguments de position d'abord, il est juste que ce comportement est incompatible avec l'aide argparse crée pour nous, ce qui indique que la barre devrait être le dernier:
Utilisation: argparsetest.py [-h] [--foo FOO [FOO ...]] bar
Alors, comment faites-vous ce travail avec le texte d'aide cohérente?
Voici une complète programme de test .
La solution
Peut-être essayer de faire --input --output drapeaux et la définition de ces options nécessaires = True dans le add_argument?
http://docs.python.org/ dev / bibliothèque / argparse.html # l'argument-add-méthode
Autres conseils
nargs='+'
dit argparse de rassembler tous les args restant ensemble, donc bar
est inclus. Il n'a aucun moyen magique pour vous deviner l'intention bar
être un argument significatif par lui-même et ne fait pas partie des args prises pour --foo
.
L'exemple dans la documentation fait référence à un simple argument --foo
, pas un avec nargs='+'
. Assurez-vous de comprendre la différence.