4

我有如下代码, foo 和 bar 都有用户选项,我需要编写:

@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 组中的一个位置。我可以使用点击来做到这一点吗?

4

2 回答 2

4

pass it in the context:

@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 will echo cats from the bar subcommand

于 2015-03-02T16:25:07.650 回答
0

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

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

@click.option(**USER_DEFAULT)

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

于 2015-02-11T08:24:59.470 回答