如何使用 python-click 在同一组中对 cmd 使用相同的选项

How to use same options for cmd in the same group by using python-click

我有如下代码,foo 和 bar 都有一个 user 选项,我需要写:

@click.option('--user', default='*')

每个函数两次。

但是我其实有很多这样的cmd,所以重复代码很多

@click.group(help="cmd group")
def main():
    pass


@click.command(name='foo')
@click.option('--user', default='*')
def foo(user):
    click.secho(user, fg='green')


@click.command(name='bar')
@click.option('--user', default='*')
def bar(user):
    click.secho(user, fg='green')


main.add_command(foo)
main.add_command(bar)

我想要的是在cmd组的一个地方添加相同的选项。我怎样才能使用点击来做到这一点?

方法1.我假设@click.option()的第一个参数名称是para.

USER_DEFAULT = {'para' : '--user', 'default' : '*'}

@click.option(**USER_DEFAULT)

方法2.将其包装在您自己的装饰器中,并填充默认参数。

在上下文中传递它:

@click.group(help="cmd group")
@click.option('--user', default='*')
@click.pass_context
def main(ctx, user):
    ctx.obj = {'user': user}


@click.command(name='foo')
@click.pass_context
def foo(ctx):
    click.secho(ctx.obj['user'], fg='green')


@click.command(name='bar')
@click.pass_context
def bar(ctx):
    click.secho(ctx.obj['user'], fg='green')


main.add_command(foo)
main.add_command(bar)

mycli --user cats bar 将从 bar 子命令回显猫