这可以通过以下
click.Group.invoke()方法来完成:
自订类别:
class MyGroup(click.Group): def invoke(self, ctx): ctx.obj = tuple(ctx.args) super(MyGroup, self).invoke(ctx)
使用自定义类:
然后使用自定义组,将其作为
cls参数传递给
group装饰器,如下所示:
@click.group(cls=MyGroup)@click.pass_contextdef cli(ctx): args = ctx.obj ....
这是如何运作的?
之所以
click可行,是因为它是一个设计良好的OO框架。该
@click.group()装饰通常实例化一个
click.Group对象,但允许与被骑过这种行为
cls的参数。因此,
click.Group在我们自己的类中继承所需的方法是一件相对容易的事情。
在这种情况下,我们过度
click.Group.invoke()争吵,争夺论点,然后将其投入
ctx.obj实地。然后可以在
cli()函数中访问它们。
测试代码:
import clickclass MyGroup(click.Group): def invoke(self, ctx): ctx.obj = tuple(ctx.args) super(MyGroup, self).invoke(ctx)@click.group(cls=MyGroup)@click.pass_contextdef cli(ctx): args = ctx.obj click.echo('cli: {} {}'.format(ctx.invoked_subcommand, ' '.join(args)))@cli.command()@click.argument('task')@click.argument('task_id')def sync(task, task_id): click.echo('Synching: {}'.format(task))cli('sync task taskid'.split())
结果:
cli: sync task taskidSynching: task
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)