Estoy escribiendo un script que tiene 2 argumentos que son mutuamente excluyentes, y una opción que solo tiene sentido con uno de esos argumentos. Estoy intentando configurar argparse para que falle si lo llamas con el argumento que no tiene sentido.python argparse con dependencias
Para que quede claro:
-m -f
tiene sentido
-s
tiene sentido
-s -f
debe tirar errores
sin argumentos están bien.
El código que tengo es:
parser = argparse.ArgumentParser(description='Lookup servers by ip address from host file')
parser.add_argument('host', nargs=1,
help="ip address to lookup")
main_group = parser.add_mutually_exclusive_group()
mysql_group = main_group.add_argument_group()
main_group.add_argument("-s", "--ssh", dest='ssh', action='store_true',
default=False,
help='Connect to this machine via ssh, instead of printing hostname')
mysql_group.add_argument("-m", "--mysql", dest='mysql', action='store_true',
default=False,
help='Start a mysql tunnel to the host, instead of printing hostname')
mysql_group.add_argument("-f", "--firefox", dest='firefox', action='store_true',
default=False,
help='Start a firefox session to the remotemyadmin instance')
que no funciona, ya que escupe
usage: whichboom [-h] [-s] [-m] [-f] host
en lugar de lo que cabe esperar:
usage: whichboom [-h] [-s | [-h] [-s]] host
o somesuch.
whichboom -s -f -m 116
no arroja ningún error.
Esta es una solución funcional. Lo configuraré para bombardear con opciones inválidas, pero siento que es un error. Si no puedo resolverlo esta mañana voy a molestar a los desarrolladores, puede ser un error. – richo
Agrego el grupo mysql y una opción más al grupo mutuamente excluyente. Supongo que esperaba la opción de excluir al otro grupo, pero no es así como funciona. Terminé yendo con tu otra solución. – richo
'grupo de argumentos' y' grupo mutuamente exclusivo' tienen propósitos muy diferentes, y no se pueden anidar de manera significativa. 'argument_group' no significa' cualquiera de los anteriores'. – hpaulj