ITPub博客

首页 > 数据库 > 数据库开发技术 > 在 Node 中调用 Python

在 Node 中调用 Python

原创 数据库开发技术 作者:凌虚 时间:2019-02-21 00:42:37 0 删除 编辑


在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。





01

—


原理


这里轻量级的调用方式其实就是通过 command line interface 实现:

首先转换 Python 程序,使其可以通过命令行的方式调用;然后在 Node 中执行命令。这样就可以轻松的实现 Node 对 Python 的调用。



02

—


示例


示例:在 Python 中有个方法是通过 PIL(图片处理库)获取 GIF 图片的帧数,并通过 Fire( CLI 工具)将其转换为命令行接口,最后在 Node 中通过 child_process 中的 spawn 执行命令调用 Python 的方法。


1、编写 Python 程序,命名为 p.py :

PIL 和 fire 都是第三方库,可以通过 pip 或者 pipenv 安装。

通过 PIL 获取图片的 n_frames 属性即图片帧数,这对 GIF 这种 multi-frames 图片是正常的,但普通的 PNG 和 JPG 图片帧数就是一,获取其 n_frames 会抛出 AttributeError 异常,捕获处理即可。

通过 fire 将此方法转换成命令行接口,这样就可以在命令行中输入:


python3  p.py  24m.gif


即可执行 Python 中的此方法获取到图片的帧数,24m.gif 就是需要提取的图片路径。


2、在 Node 中调用:

通过 child_process 中的 spawn 执行相同的命令即可。







结语


这里其实最关键的一点就是通过 fire 去生成 Python 的命令行接口,fire 的更多用法参考官方文档即可。


对于本文中的示例提取 GIF 图片帧数,如果要在 Node 中实现,你可以通过 gm(GraphicsMagick)完成,但是效率极差,提取 24M 大小 47 帧的 GIF 图片需要二十秒,这显然无法接受,而通过 Python 的 PIL 则几乎瞬间完成。


不可否认的是 Node 和 Python 各有所长,本文介绍的通过命令行接口的轻量级调用方式,可以我们更加灵活的运用两种编程语言,更加高效的实现业务需求。




原文作者:系统架构师Go;如有侵权,请联系管理员删除。

上一篇: 图像处理基础
请登录后发表评论 登录
全部评论

注册时间:2017-03-30

  • 博文量
    154
  • 访问量
    63678