278 votes

argparse : exiger ou l’autre des deux arguments

Donné:

 import argparse

pa = argparse.ArgumentParser()
pa.add_argument('--foo')
pa.add_argument('--bar')

print pa.parse_args('--foo 1'.split())
 

comment je

  • rendre obligatoire au moins un "foo, bar": --foo x , --bar y et --foo x --bar y vont bien
  • rendre au plus un des "foo, bar" obligatoire: --foo x ou --bar y sont bien, --foo x --bar y n'est pas

450voto

jlengrand Points 2994

Je pense que vous êtes à la recherche de quelque chose comme d'exclusion mutuelle (au moins pour la première partie de votre question). De cette façon, seuls les foo bar ou seront acceptés, mais pas les deux.

    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument('--foo',action=.....)
    group.add_argument('--bar',action=.....)
    args = parser.parse_args()

Et en effet, vous pouvez résoudre la première partie de la question avec Christian Witts de réponse. En combinant les deux, vous devriez être en mesure d'obtenir ce que vous voulez.

BTW, juste trouvé une autre question en faisant référence au même type de problème.

Espérons que cette aide

49voto

sth Points 91594

Si vous avez besoin d'une vérification qui n'est pas fournie par le module, vous pouvez toujours le faire manuellement:

 pa = argparse.ArgumentParser()
...
args = pa.parse_args()

if args.foo is None and args.bar is None:
   pa.error("at least one of --foo and --bar required")
 

-3voto

Christian Witts Points 4369

Avec l'option nargues .

nargs - Le nombre d'arguments de ligne de commande à utiliser.

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