Требовать любой из двух аргументов, используя 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
не
Ответы
Ответ 1
Я думаю, что вы ищете что-то вроде взаимного исключения (по крайней мере, для второй части вашего вопроса).
Таким образом, будет принят только foo или bar, а не оба.
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()
Кстати, только что нашел другой вопрос, относящийся к той же проблеме.
Надеюсь это поможет
Ответ 2
Если вам нужна проверка, которая не предоставляется модулем, вы всегда можете сделать это вручную:
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")