Python Click: группа должна выполнить код ПОСЛЕ команды

У меня есть click.group() определены, с около 10 команд в нем. Я понимаю, как использовать группу для запуска кода перед кодом в команде, но я также хочу запускать некоторый код ПОСЛЕ каждой команды. Это возможно с кликом?

2 ответа

Вы можете использовать @resultcallback decorator

@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

Это сработало для меня 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!!

Документация

Другие вопросы по тегам