Me doy cuenta de que esto se parece mucho a Setting default option in Python of two mutually exclusive options using the argparse module aunque desde una perspectiva diferente (y las respuestas dadas allí no parecen ayudar).Establezca el valor predeterminado en falso si otro argumento mutuamente excluyente es verdadero
bloque de código (analizador es una instancia de argparse.ArgumentParser):
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_true",
dest="show", default=True)
mutex_group.add_argument("--insert", action="store_true",
dest="insert")
opts = parser.parse_args()
Si ninguno --show
o --insert
se especifican Quiero defecto a --show
(de ahí default=True
), pero si se utiliza entonces --insert
opts.show
es todavía set true (debido al valor predeterminado), a pesar de ser parte de un bloque mutuamente exclusivo.
El código actual comprueba que ninguna de las otras opciones se han establecido cuando se prueba si opt.show
es cierto, es decir:
if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()
pero esto no escala (lo que sucede cuando se agrega a la --delete
mutuamente excluyentes grupo, etc.) así que estoy buscando una forma mejor de hacer que todas las demás variables hagan opts.show
falso mientras todavía lo tienen como predeterminado.
Al leer los documentos argparse, creo que una acción personalizada sería el camino a seguir, pero no puedo ver cómo acceder a los otros miembros del grupo mutuamente excluyente desde dentro (la teoría es que podría iterar sobre ellos, y cambiar el valor predeterminado si se estableció alguno de los demás). La otra opción sería invertir las condiciones if, pero eso parece impuro (si el valor predeterminado cambia, el orden de las sentencias if también debería cambiar).