python – 带有click的命令中的可选参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 带有click的命令中的可选参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1832字,纯文字阅读大概需要3分钟。
内容图文
![python – 带有click的命令中的可选参数](/upload/InfoBanner/zyjiaocheng/728/c2d607f12dad43ee8cc31fef0bd66275.jpg)
我正在尝试使用Click完成一些不太标准的CLI解析,它只能部分工作:
>主CLI有多个子命令(在’show’和’check’下面的示例中)
>这些命令都可能具有可选参数,但参数不在其后面
>我决定在“上面”组中处理该参数并在上下文中传递值
样品:
import click
@click.group()
@click.argument('hostname', required=False)
@click.pass_context
def cli(ctx, hostname=None):
""""""
ctx.obj = hostname
click.echo("cli: hostname={}".format(hostname))
@cli.command()
@click.pass_obj
def check(hostname):
click.echo("check: hostname={}".format(hostname))
@cli.command()
@click.pass_obj
def show(hostname):
click.echo("check: hostname={}".format(hostname))
if __name__ == '__main__':
cli()
主机名的部分有效:
> pipenv run python cli.py localhost check
cli: hostname=localhost
check: hostname=localhost
> pipenv run python cli.py localhost show
cli: hostname=localhost
check: hostname=localhost
但没有主机名的部分不是:
> pipenv run python cli.py show
Usage: cli.py [OPTIONS] [HOSTNAME] COMMAND [ARGS]...
Error: Missing command.
有人对我应该开始研究的方向有所了解吗?
解决方法:
这可以通过遍历click.Group参数解析器来完成,如:
自定义类:
class MyGroup(click.Group):
def parse_args(self, ctx, args):
if args[0] in self.commands:
if len(args) == 1 or args[1] not in self.commands:
args.insert(0, '')
super(MyGroup, self).parse_args(ctx, args)
使用自定义类:
然后使用自定义组,将其作为cls参数传递给组装饰器,如:
@click.group(cls=MyGroup)
@click.argument('hostname', required=False)
@click.pass_context
def cli(ctx, hostname=None):
....
怎么样?
这是有效的,因为click是一个设计良好的OO框架. @ click.group()装饰器通常实例化一个click.Group对象,但允许使用cls参数覆盖此行为.因此,从我们自己的类中继承click.Group并过度使用所需的方法是一个相对容易的事情.
在这种情况下,我们超过click.Group.parse_args(),如果第一个参数匹配命令而第二个参数不匹配,那么我们插入一个空字符串作为第一个参数.这会将所有内容放回解析器所期望的位置.
内容总结
以上是互联网集市为您收集整理的python – 带有click的命令中的可选参数全部内容,希望文章能够帮你解决python – 带有click的命令中的可选参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。