[pyar] Ayuda con argparse

Matías Bellone matiasbellone en gmail.com
Mie Dic 13 15:48:06 ART 2017


2017-12-13 15:31 GMT-03:00 poxyran <poxyrantab en gmail.com>:
> Hola a todos!,
>
> estoy teniendo un problema y no logro dar con la solucion exacta. Mi
> problema es el siguiente:
>
> necesito tener dos parametros mutuamente excluyentes pero cualquiera de
> los dos tienen que ser requeridos. Por ej, supongamos que tengo -foo y
> -bar. Los dos no pueden ser especificados al mismo tiempo pero si o si
> uno de los dos.
>
> Ademas, necesito tener un parametro opcional -sarasa que puede ser
> especificado o no conjuntamente con cualquiera de los parametros
> requeridos, -foo o -bar.
>
> Estuve dando vueltas alrededor de add_mutually_exclusive_group pero me
> pasan dos cosas: 1. Los parametros son listados como 'opcionales' en
> lugar de 'requeridos'

cuando creás el grupo de opciones exclusivas con
add_mutually_exclusive_group podés pasar el parámetro required=True
para hacer lo que necesitás.

> 2. no tengo idea como agregar el parametro
> opcional en ese caso.
>

Lo agregás como un parámetro normal al parser original (no al grupo exclusivo).

En resumen:

>>> from argparse import ArgumentParser
>>> parser = ArgumentParser()
>>> exclusive = parser.add_mutually_exclusive_group(required=True)
>>> exclusive.add_argument('-foo')
_StoreAction(option_strings=['-foo'], dest='foo', nargs=None,
const=None, default=None, type=None, choices=None, help=None,
metavar=None)
>>> exclusive.add_argument('-bar')
_StoreAction(option_strings=['-bar'], dest='bar', nargs=None,
const=None, default=None, type=None, choices=None, help=None,
metavar=None)
>>> parser.add_argument('-sarasa')
_StoreAction(option_strings=['-sarasa'], dest='sarasa', nargs=None,
const=None, default=None, type=None, choices=None, help=None,
metavar=None)
>>> print(parser.format_help())
usage: [-h] (-foo FOO | -bar BAR) [-sarasa SARASA]

optional arguments:
  -h, --help      show this help message and exit
  -foo FOO
  -bar BAR
  -sarasa SARASA

Saludos,
Toote


Más información sobre la lista de distribución pyar