Требует двух аргументов с помощью argparse


дано:

import argparse

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

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

как

  • сделайте хотя бы один из "foo, bar" обязательным: --foo x,--bar y и --foo x --bar y штраф
  • сделайте не более одного из "foo, bar" обязательным:--foo x или --bar y штрафа, --foo x --bar y - это не
2 119

2 ответа:

Я думаю, вы ищете что-то вроде взаимоисключение (по крайней мере, для второй части вашего вопроса).

таким образом, будут приняты только foo или bar, а не оба.

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

кстати, только что нашел еще вопрос ссылаясь на тот же вопрос.

надеюсь, что это помогает

Если вам нужна какая-то проверка, которая не предусмотрена модулем, вы всегда можете сделать это вручную:

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