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

前端 未结 2 948
耶瑟儿~
耶瑟儿~ 2021-02-03 23:29

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         


        
2条回答
  •  梦谈多话
    2021-02-04 00:24

    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.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.
    

提交回复
热议问题