如何使用 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 子命令回显猫
我有如下代码,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 子命令回显猫