Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python单击库中使用布尔标志(命令行参数)_Python_Command Line Arguments_Python Click - Fatal编程技术网

在Python单击库中使用布尔标志(命令行参数)

在Python单击库中使用布尔标志(命令行参数),python,command-line-arguments,python-click,Python,Command Line Arguments,Python Click,我正在尝试为我的Python程序创建一个详细标志。 目前,我正在这样做: 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 verboseF

我正在尝试为我的Python程序创建一个详细标志。 目前,我正在这样做:

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

即使我设置了“-v”参数,它也不会打印“Verbose on!”。我的想法是log函数需要一个参数,但是我应该给它什么呢?另外,有没有一种方法可以在没有全局变量的情况下检查verbose标志是否处于打开状态?

因此click不仅仅是一个命令行解析器。它还分派和处理命令。因此,在您的示例中,
log()
函数永远不会返回到
main()
。该框架的目的是,修饰后的函数,即:
log()
,将完成所需的工作

代码: 测试代码: 结果:
上面的答案很有帮助,但这就是我最终使用的答案。我想我应该和大家分享一下,因为很多人都在关注这个问题:

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

如何将实际的命令行参数/标志传递给main?现在,类似“python3tester.py--verbose”的东西将提供与“python3tester.py”相同的输出
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.
@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()