15

我有一个click.group()定义,其中包含大约 10 个命令。我了解如何在命令中的代码之前使用组来运行代码,但我也想在每个命令运行之后运行一些代码。点击可以吗?

4

2 回答 2

24

你可以使用@resultcallback装饰器

@click.group()
def cli():
    click.echo('Before command')


@cli.resultcallback()
def process_result(result, **kwargs):
    click.echo('After command')


@cli.command()
def command():
    click.echo('Command')


if __name__ == '__main__':
    cli()

输出:

$ python cli.py command
Before command
Command
After command
于 2016-07-03T08:29:50.103 回答
0

这对我有用Click==7.0。没有尝试过resultcallback

$ cat check.py 
import click

@click.group()
@click.pass_context
def cli(ctx):
    print("> Welcome!!")
    ctx.call_on_close(_on_close)

def _on_close():
    print("> Done!!")

@cli.command()
def hello():
    print("Hello")

if __name__ == '__main__':
    cli()

输出:

$ python3 check.py hello
> Welcome!!
Hello
> Done!!

文档

于 2021-05-30T03:38:22.023 回答