在 python 单击链命令中向所有叶级命令添加命令

add a command to all leaf level commands in a python click chain commands

我有一个类似这样的命令链。

@click.group()
@click.option('--debug/--no-debug', default=False)
def cli(debug):
    click.echo('Debug mode is %s' % ('on' if debug else 'off'))

@cli.command()  
def sync1():
    click.echo('Syncing 1')
@cli.command()  
def sync2():
    click.echo('Syncing 1')
tool.py
Usage: tool.py [OPTIONS] COMMAND [ARGS]...

Options:
  --debug / --no-debug
  --help                Show this message and exit.

Commands:
  sync1
  sync2

这就是我 运行 以嵌套方式执行命令的方式。

tool.py sync1 --help

tool.py sync2 --help

现在假设每个叶级命令(即本例中的 sync1 和 sync2)调用一些 API,我想打印那个 API 的名称。

在不更改所有叶级函数的情况下实现的最佳方法是什么(即 sync1/sync2)。

实现此目的的一种方法是使用结果回调装饰器。

@cli.resultcallback()
def process_result(result, **kwargs):
    click.echo('Print your API name here')

这应该允许在调用命令后执行代码。但是,我不确定执行顺序对您是否重要。

希望对您有所帮助!