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()