I'm trying to make a verbose flag for my Python program. Currently, I'm doing this:
import click #global variable verboseFlag = False #parse arguments @click.command() @click.option('--verbose', '-v', is_flag=True, help="Print more output.") def log(verbose): global verboseFlag verboseFlag = True def main(): log() if verboseFlag: print("Verbose on!") if __name__ == "__main__": main()
It'll never print "Verbose on!" even when I set the '-v' argument. My thoughts are that the log function needs a parameter, but what do I give it? Also, is there a way to check whether the verbose flag is on without global variables?
Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It's the “Command Line Interface Creation Kit”. It's highly configurable but comes with sensible defaults out of the box.
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.
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)
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With