如何在评估 Click cli 函数后继续执行 Python 脚本?
How to continue execution of Python script after evaluating a Click cli function?
假设我在文件中定义了一个基本的 click CLI 命令 cli.py
:
import click
@click.command()
@click.option('--test-option')
def get_inputs(test_option):
return test_option
然后是另一个模块脚本 test_cli.py
,我想从中使用上面定义的 CLI:
from cli import get_inputs
print('before calling get_inputs')
print(get_inputs())
print('after calling get_inputs')
然后在命令行上:
$ python test_cli.py --test-option test123
before calling get_inputs
所以看起来在点击命令 运行 之后,整个 Python 过程结束,即使在启动的脚本中的点击命令之后有语句和表达式要计算呼叫,他们将不会被执行。我将如何实现这一目标?
实际上,Click 文档很好地解释了为什么会出现这种情况,以及如何更改这种行为。
默认情况下,所有命令都继承自 BaseCommand
,它定义了一个 main
方法,该方法在成功完成后默认退出 sys.exit()
,它会发出 SystemExit
异常。
要改变这种行为,可以禁用他们所说的 standalone_mode
作为 documented here。
因此,对于我的问题中提供的示例,将 test_cli.py
中包含 get_inputs()
调用的行从 print(get_inputs())
更改为 print(get_inputs.main(standalone_mode=False))
,然后从命令调用脚本行给出了所需的行为,如下所示:
$ python test_cli.py --test-option test123
before calling get_inputs
test123
after calling get_inputs
假设我在文件中定义了一个基本的 click CLI 命令 cli.py
:
import click
@click.command()
@click.option('--test-option')
def get_inputs(test_option):
return test_option
然后是另一个模块脚本 test_cli.py
,我想从中使用上面定义的 CLI:
from cli import get_inputs
print('before calling get_inputs')
print(get_inputs())
print('after calling get_inputs')
然后在命令行上:
$ python test_cli.py --test-option test123
before calling get_inputs
所以看起来在点击命令 运行 之后,整个 Python 过程结束,即使在启动的脚本中的点击命令之后有语句和表达式要计算呼叫,他们将不会被执行。我将如何实现这一目标?
实际上,Click 文档很好地解释了为什么会出现这种情况,以及如何更改这种行为。
默认情况下,所有命令都继承自 BaseCommand
,它定义了一个 main
方法,该方法在成功完成后默认退出 sys.exit()
,它会发出 SystemExit
异常。
要改变这种行为,可以禁用他们所说的 standalone_mode
作为 documented here。
因此,对于我的问题中提供的示例,将 test_cli.py
中包含 get_inputs()
调用的行从 print(get_inputs())
更改为 print(get_inputs.main(standalone_mode=False))
,然后从命令调用脚本行给出了所需的行为,如下所示:
$ python test_cli.py --test-option test123
before calling get_inputs
test123
after calling get_inputs