Requerir cualquiera de los dos argumentos usando argparse

Resuelto georg asked hace 12 años • 2 respuestas

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 xy --bar yestán --foo x --bar ybien
  • hacer como máximo uno de "foo, bar" obligatorio: --foo xo --bar yestán bien, --foo x --bar yno lo es
georg avatar Jun 22 '12 18:06 georg
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á --fooo , 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.

jlengrand avatar Jun 22 '2012 11:06 jlengrand

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")
sth avatar Jun 22 '2012 11:06 sth