Requiere cualquiera de los dos argumentos usando argparse

2 minutos de lectura

avatar de usuario
jorge

Dado:

import argparse

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

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

Cómo puedo

  • hacer que al menos uno de “foo, bar” sea obligatorio: --foo x, --bar y y --foo x --bar y estan bien
  • hacer como máximo uno de “foo, bar” obligatorio: --foo x o --bar y estan bien, --foo x --bar y no es

  • posible duplicado de Cómo codificar opciones combinacionales de argparse en python

    – Roberto

    22 de junio de 2012 a las 11:18

avatar de usuario
jlengrand

Creo que estás buscando algo como exclusión mutua (al menos para la segunda parte de su pregunta).

De esta forma, solo se aceptarán foo o bar, no ambos.

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, su respuesta aún funcionó para mí después de darme cuenta de que en realidad resuelve las dos condiciones propuestas en la pregunta (XOR, básicamente). Mi preocupación inicial era que la tuya solo resolvía solo una de las dos condiciones.

    – José

    13 de abril de 2018 a las 17:28

  • Gracias por la respuesta. Tenía la idea de que estaba resolviendo todo, pero ya no estaba seguro: D. ¡Editaré la respuesta en consecuencia!

    – jlengrand

    14 de abril de 2018 a las 8:48

Si necesita alguna verificación que no proporciona el módulo, siempre puede hacerlo manualmente:

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

  • Hay un Tema abierto proponiendo mejorar argparse para incluir diferentes tipos de grupos probados de uso

    – artu-hnrq

    17 oct 2021 a las 7:52

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad