return 使用 is_eager 选项的退出代码 python 点击

return exit code with is_eager option in python click

我正在使用单击 framework.I 想要 return 版本并在我 运行 python hello.py -- 版本时退出代码。目前我的代码是这样的。

import click
def print_version(ctx, param, value):
    if not value or ctx.resilient_parsing:
        return
    click.echo('Version 1.0')
    return 1
    ctx.exit()

@click.command()
@click.option('--version', is_flag=True, callback=print_version,
              expose_value=False, is_eager=True)
def hello():
    click.echo('Hello World!')

hello()
$ python hello.py --version
    Version 1.0
    Hello World!

我期待这样的输出:

$ python hello.py --version
    Version 1.0
    1

错误是您在调用 exit 语句之前 return 从您的函数中退出。所以它永远不会得到 运行。此处不需要 return 语句。此代码应该有效:

import click

def print_version(ctx, param, value):
    if not value or ctx.resilient_parsing:
        return
    click.echo('Version 1.0')
    ctx.exit(0)

@click.command()
@click.option('--version', is_flag=True, callback=print_version,
              expose_value=False, is_eager=True)

def hello():
    click.echo('Hello World!')

hello()

这只会输出 Version 1.0 并且会以退出代码 0 退出。您可以在 cox.exit(YOUR_EXIT_CODE) 中更改您想要的任何退出代码,尽管您可能希望为此使用 0 作为退出代码。

如果你想检查退出代码,你可以执行你的程序,而不是 运行 在你的 unix-based shell 中添加一个额外的命令来获取最后执行的命令的退出代码:

python3 FILE_NAME.py --version
echo $?