Using Boolean Flags in Python Click Library (command line arguments) Using Boolean Flags in Python Click Library (command line arguments) python python

Using Boolean Flags in Python Click Library (command line arguments)


So click is not simply a command line parser. It also dispatches and processes the commands. So in your example, the log() function never returns to main(). The intention of the framework is that the decorated function, ie: log(), will do the needed work.

Code:

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)

Test Code:

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

Results:

Click Version: 6.7Python Version: 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]-----------> --verboseVerbose on!-----------> -vVerbose on!-----------> Verbose off!-----------> --helpUsage: test.py [OPTIONS]Options:  -v, --verbose  Print more output.  --help         Show this message and exit.


The above answer was helpful, but this is what I ended up using. I thought I'd share since so many people are looking at this question:

@click.command()@click.option('--verbose', '-v', is_flag=True, help="Print more output.")def main(verbose):    if verbose:        # do somethingif __name__ == "__main__":    # pylint: disable=no-value-for-parameter    main()