什么是 JSPyBridge
JSPyBridge 用于 Node.js 和 Python的互操作。开发者可以从 Node.js 运行 Python,或从 Python 运行 Node.js,目前该项目的深度研发工作正在陆续进行中。 如果需要体验,开发者需要安装 Node.js 14 和 Python 3.8 或更高版本。
JSPyBridge 的典型特征包括:
能够调用异步和同步函数并以原生方式获取对象属性
内置垃圾收集
具有任意参数的双向回调
迭代和异常处理支持
对象检查允许开发者轻松地 console.log 或 print() 任何对象
JS 调用 Python 的桥梁:Python 类的扩展和继承,可以参考文末 pytorch 和 tensorflow 示例。
从 Python 调用 JS 的桥梁:基于本机装饰器的事件发射器支持
从 Python 调用 JS 的桥梁:一流的 Jupyter Notebook/Google Colab 支持。
目前 JSPyBridge 在 Github 上开源,是一个值得关注的前端开源项目。
如何使用 JSPyBridge
从 Python 访问 JavaScript
from javascript import require, globalThis
chalk, fs = require("chalk"), require("fs")
print("Hello", chalk.red("world!"), "it's", globalThis.Date().toLocaleString())
fs.writeFileSync("HelloWorld.txt", "hi!")
从 JavaScript 访问 Python
import { python } from 'pythonia';
// 导入 tkinter
const tk = await python('tkinter');
// 有Python API访问都必须以await为前缀
const root = await tk.Tk();
// 带 $ 后缀的函数调用会将最后一个参数视为 kwarg 字典
const a = await tk.Label$(root, { text: 'Hello World' });
await a.pack();
await root.mainloop();
python.exit();
//确保最后退出Python以允许Node退出,开发者还可以使用 process.exit
需要注意的是,JSPyBridge 与其他 Bridge 不同,开发者可能会注意到不只是用 JavaScript 编写 Python 代码,反之亦然。
开发者可以对 Bridge 另一侧的对象进行操作,就像这些对象存在于当前环境一样, 这是通过真正的互操作支持实现的。
开发者可以调用回调,并使用自己喜欢的任何参数进行无损函数调用,当然浮点精度除外。
同时,需要注意以下几点:
当进行函数调用时,任何外部对象都会作为引用传递。 例如,如果在 JavaScript 中对返回数组的 Python 进行函数调用,则不会返回 JS 数组,但会获得对 Python 数组的引用。 只要使用await,开发者仍然可以使用[]符号正常访问数组。 如果希望 JSPyBridge 将外部引用转换为本机引用,则可以通过在 Python 数组上调用 .valueOf() 来请求原始值。 这会给你一个 JS 数组。 反之亦然。
上述行为使得将数据从一个函数传输到另一个函数的速度非常快,从而避免昂贵转换。
回调和函数参数不存在上述行为。 桥接器将尝试序列化它可以序列化的内容,如果无法序列化某些内容,则会提供外部引用。 因此,如果传递一个 JS 对象,将获得一个 Python 字典,但如果该字典包含类似类的内容,将在其位置获得一个引用。
同时还需要注意以下几点:
ffid 关键字被保留,不能在变量名称、对象键或值中使用它,其用于内部跟踪对象。
在从 Python 调用JavaScript 的 Bridge 上,由于Python和跨平台IPC的限制,目前通过标准错误进行通信,这意味着JS标准错误中的JSON输出可能会干扰Bridge。 Windows 上的 python 也存在同样的问题。 但是,您不太可能遇到此问题。
开发者可以在导入库之前通过设置 NODE_BIN 或 PYTHON_BIN 环境变量来设置 Node.js/Python 二进制路径。 否则,Nodejs 和 python3 或 python 二进制文件将相对于 PATH 环境变量被调用。
函数调用将在 100000 毫秒后超时并抛出 BridgeException 错误。 开发者可以通过在环境变量中定义 REQ_TIMEOUT 的新值来覆盖该默认值。
JSPyBridge 相关网站资源
https://github.com/extremeheat/JSPyBridge#jspybridge
https://blog.logrocket.com/exploring-jspybridge-library-python-javascript/
https://deventor.io/blog/node-js-vs-python/
2
为您推荐
前端的 cookie 读写在 2020 年之前一直不存在一个官方的接口,每次需要使用 cookie 的时候,要么是引入三方插件,要么就需要自己封装一个公用的组件或函数。npm 的 cookie 插件周下载量 6 千万左右,可以想象一下此..
在 MySQL 中,操作多数据源(例如从库 A 和库 B)进行联查的情况,可以分为以下两种场景:A 库和 B 库在同一个 MySQL 实例当 A 库和 B 库在同一个 MySQL 实例下时,可以直接使用跨库联查查询。示例如下:SELECT A.co..
在现代教育与可视化内容制作中,动画已成为传递抽象概念的重要媒介。Manim(Mathematical Animation Engine)是一款基于 Python 的开源动画库,专为制作高质量数学动画而设计。无论你是教育工作者、内容创作者还是编..
查询数据库中所有表名select table_name from information_schema.tables where table_schema='tools' and table_type='base table';查询指定数据库中指定表的所有字段名column_nameselect column_n..
本文给大家分享 5 个开源的 .NET Excel 读写操作库,它们广泛用于处理 Excel 文件,包括读取、写入、导入和导出数据。1. EPPlus简介:EPPlus 是功能强大的 .NET 库,用于创建和读取 Excel 文件(.xlsx 和 .xlsm 格式..
字典是一种以键值对存在的数据结构,他的底层是Array数组字典初始化和数组初始化的区别:数组的初始化:var arr = [1,2,3,4,5];//使用中括号字典的初始化: var names = {“a”:“aaa”,“b”:“bbb”,“c”:“ccc”}..
在数字化时代,网页自动化工具成为开发人员和数据分析师的得力助手。今天,我们将深入探索一款名为 DrissionPage 的全能网页自动化工具,它以其强大的功能和优雅的语法,成为 Python 程序员的新宠。什么是 DrissionP..
使用EntityFramework生成的Sql语句,出现下列异常:异常详细信息: System.ComponentModel.Win32Exception: 等待的操作过时。代码如下:query.Count = items.Count();var result = items.OrderByDescending(m => m.Id..
在 .NET 6 中,你可以使用 NPOI 库来操作 Excel 文件。NPOI 是一个用于处理 Office 文档(包括 Excel)的开源库,它提供了丰富的功能和 API,可以让你在 .NET 中轻松地读取和写入 Excel 文件。以下是一个简单的示例..
RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反..
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可..
连接和操作MongoDB与.NET Core可以通过MongoDB官方提供的.NET驱动程序来实现。以下是一种基本的连接和操作MongoDB的方法:步骤 1: 安装 MongoDB 驱动程序首先,在你的.NET Core项目中安装 MongoDB.Driver 包。你可以..
推荐一个高性能、跨平台的操作Excel文件的.NET开源库。ClosedXML简介ClosedXML是一个.NET第三方开源库,支持读取、操作和写入Excel 2007+ (.xlsx, .xlsm)文件,是基于OpenXML封装的,让开发人员无需了解OpenXML API..
下载安装完Pycharm后,创建一个py文件编写代码会提示No Python interpreter configured for the project,这是提示要配置解释器,可以去官网下载安装。从官网下载https://www.python.org/downloads/windows/以我的电..
Node-RED是一种编程工具,用于以新颖有趣的方式将硬件设备、API和在线服务连接在一起。它提供了一个基于浏览器的流程编辑器,使您可以轻松地使用设计器中的各种节点将流连接在一起,并且可以一键将其部署到其运行,..
APScheduler 是 Python 中一个功能强大且灵活的定时任务调度库,允许你以多种方式(如日期、时间间隔等)调度执行 Python 函数或代码块。它支持多种调度器(Schedulers),包括基于日期、间隔、CRON 表达式等多种方..
使用C#操作摄像头,主要有两种方法:使用Windows.Media.Capture库使用第三方组件,如AForge使用Windows.Media.Capture库Windows.Media.Capture库是Windows 10中提供的官方摄像头操作库。使用该库,可以直接访问摄像..
PHP和Python这两种编程语言都在Web开发领域非常流行,各有优势和劣势。接下来,我们从语法、性能、可扩展性、框架、库和社区等方面,对PHP和Python进行比较和对比,帮助你做出最佳的选择。语法语法是编程语言的基础..
Conda简介Conda是一个包依赖和环境管理工具,适用于: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN多钟语言,比如在A服务器开发了一个应用,安装了N个包。现在要迁移到B服务器,又要重新安装一遍,还不知道..
摘要因为编译和运行都非常接近CPU,C++是非常强大的编程语言,C++使您的代码非常快,但您必须编写大量代码来实现。尤其是用C++进行多线程或异步编程,是最可怕的噩梦,很难使用。然而,现在使用的很多操作系统都是用..