获取发送到click.group()的子命令的参数

获取发送到click.group()的子命令的参数,第1张

获取发送到click.group()的子命令的参数

这可以通过以下

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5632019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存