Requerir cualquiera de los dos argumentos usando argparse
Dado:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('--bar')
print(parser.parse_args('--foo 1'.split()))
Cómo puedo
- haga que al menos uno de "foo, bar" sea obligatorio:
--foo x
y--bar y
están--foo x --bar y
bien - hacer como máximo uno de "foo, bar" obligatorio:
--foo x
o--bar y
están bien,--foo x --bar y
no lo es
Aceptado
Creo que estás buscando algo así como exclusión mutua (al menos para la segunda parte de tu pregunta).
De esta manera, sólo se aceptará --foo
o , no ambos.--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()
Por cierto, acabo de encontrar otra pregunta que se refiere al mismo tipo de problema.
Si necesitas alguna comprobación que no te proporciona el módulo siempre puedes hacerlo manualmente:
parser = argparse.ArgumentParser()
# ...
args = parser.parse_args()
if args.foo is None and args.bar is None:
parser.error("at least one of --foo and --bar required")