web-dev-qa-db-fra.com

Requiert l'un des deux arguments avec argparse

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 ça va
  • rendre au plus un des "foo, bar" obligatoire: --foo x ou --bar y ça va, --foo x --bar y n'est pas
154
georg

Je pense que vous recherchez quelque chose comme exclusion mutuelle (au moins pour la deuxième partie de votre question).

De cette façon, seuls foo ou bar seront acceptés, pas les deux.

    import argparse

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

BTW, vient de trouver ne autre question se référant au même genre de problème.

J'espère que cela t'aides

244
jlengrand

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")
28
sth