Saltar al contenido

Uso de banderas booleanas en Python Click Library (argumentos de línea de comando)

Esta pregunta se puede resolver de diferentes maneras, sin embargo te enseñamos la que para nosotros es la respuesta más completa.

Solución:

Entonces, hacer clic no es simplemente un analizador de línea de comando. También envía y procesa los comandos. Así que en tu ejemplo, el log() La función nunca vuelve a main(). La intención del marco es que el decorado funcione, es decir: log()hará el trabajo necesario.

Código:

import click

@click.command()
@click.option('--verbose', '-v', is_flag=True, help="Print more output.")
def log(verbose):
    click.echo("Verbose !".format('on' if verbose else 'off'))


def main(*args):
    log(*args)

Código de prueba:

if __name__ == "__main__":
    commands = (
        '--verbose',
        '-v',
        '',
        '--help',
    )

    import sys, time

    time.sleep(1)
    print('Click Version: '.format(click.__version__))
    print('Python Version: '.format(sys.version))
    for cmd in commands:
        try:
            time.sleep(0.1)
            print('-----------')
            print('> ' + cmd)
            time.sleep(0.1)
            main(cmd.split())

        except BaseException as exc:
            if str(exc) != '0' and 
                    not isinstance(exc, (click.ClickException, SystemExit)):
                raise

Resultados:

Click Version: 6.7
Python Version: 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]
-----------
> --verbose
Verbose on!
-----------
> -v
Verbose on!
-----------
> 
Verbose off!
-----------
> --help
Usage: test.py [OPTIONS]

Options:
  -v, --verbose  Print more output.
  --help         Show this message and exit.

La respuesta anterior fue útil, pero esto es lo que terminé usando. Pensé en compartir ya que muchas personas están mirando esta pregunta:

@click.command()
@click.option('--verbose', '-v', is_flag=True, help="Print more output.")
def main(verbose):
    if verbose:
        # do something

if __name__ == "__main__":
    # pylint: disable=no-value-for-parameter
    main()

Acuérdate de que puedes aclarar si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *