首页 程序笔记 JSPyBridge让Node.js和Python互操作

JSPyBridge让Node.js和Python互操作

什么是 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

站心网

什么是 JSPyBridge JSPyBridge 用于 Node.js 和 Python的互操作。开发者可以从 Node.js 运行 Python,或从 ..

为您推荐

Mysql查询的一些操作(查表名,查字段名,查当月,查一周,查当天)

查询数据库中所有表名select table_name from information_schema.tables where table_schema='tools' and table_type='base table';查询指定数据库中指定表的所有字段名column_nameselect column_n..

分享5个开源的.NET Excel读写操作库

本文给大家分享 5 个开源的 .NET Excel 读写操作库,它们广泛用于处理 Excel 文件,包括读取、写入、导入和导出数据。1. EPPlus简介:EPPlus 是功能强大的 .NET 库,用于创建和读取 Excel 文件(.xlsx 和 .xlsm 格式..

JavaScript中字典的常用操作

字典是一种以键值对存在的数据结构,他的底层是Array数组字典初始化和数组初始化的区别:数组的初始化:var arr = [1,2,3,4,5];//使用中括号字典的初始化: var names = {“a”:“aaa”,“b”:“bbb”,“c”:“ccc”}..

DrissionPage 基于Python的网页自动化工具

在数字化时代,网页自动化工具成为开发人员和数据分析师的得力助手。今天,我们将深入探索一款名为 DrissionPage 的全能网页自动化工具,它以其强大的功能和优雅的语法,成为 Python 程序员的新宠。什么是 DrissionP..

EntityFramework异常Win32Exception (0x80004005): 等待的操作过时。

使用EntityFramework生成的Sql语句,出现下列异常:异常详细信息: System.ComponentModel.Win32Exception: 等待的操作过时。代码如下:query.Count = items.Count();var result = items.OrderByDescending(m => m.Id..

.NET6 使用NPOI操作Excel的方法

在 .NET 6 中,你可以使用 NPOI 库来操作 Excel 文件。NPOI 是一个用于处理 Office 文档(包括 Excel)的开源库,它提供了丰富的功能和 API,可以让你在 .NET 中轻松地读取和写入 Excel 文件。以下是一个简单的示例..

Linux下RabbitMQ安装和.NET Core使用RabbitMQ.Client操作

RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反..

Windows下RabbitMQ安装和使用EasyNetQ组件操作

RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可..

.NET Core连接和操作MongoDB用法示例

连接和操作MongoDB与.NET Core可以通过MongoDB官方提供的.NET驱动程序来实现。以下是一种基本的连接和操作MongoDB的方法:步骤 1: 安装 MongoDB 驱动程序首先,在你的.NET Core项目中安装 MongoDB.Driver 包。你可以..

操作Excel的.NET开源库ClosedXML

推荐一个高性能、跨平台的操作Excel文件的.NET开源库。ClosedXML简介ClosedXML是一个.NET第三方开源库,支持读取、操作和写入Excel 2007+ (.xlsx, .xlsm)文件,是基于OpenXML封装的,让开发人员无需了解OpenXML API..

Python环境安装,解释器配置

下载安装完Pycharm后,创建一个py文件编写代码会提示No Python interpreter configured for the project,这是提示要配置解释器,可以去官网下载安装。从官网下载https://www.python.org/downloads/windows/以我的电..

基于浏览器的流程编辑工具:Node-RED简介

Node-RED是一种编程工具,用于以新颖有趣的方式将硬件设备、API和在线服务连接在一起。它提供了一个基于浏览器的流程编辑器,使您可以轻松地使用设计器中的各种节点将流连接在一起,并且可以一键将其部署到其运行,..

Python定时任务调度框架APScheduler详解

APScheduler 是 Python 中一个功能强大且灵活的定时任务调度库,允许你以多种方式(如日期、时间间隔等)调度执行 Python 函数或代码块。它支持多种调度器(Schedulers),包括基于日期、间隔、CRON 表达式等多种方..

使用C#操作摄像头

使用C#操作摄像头,主要有两种方法:使用Windows.Media.Capture库使用第三方组件,如AForge使用Windows.Media.Capture库Windows.Media.Capture库是Windows 10中提供的官方摄像头操作库。使用该库,可以直接访问摄像..

PHP和Python哪个更适合Web开发?

PHP和Python这两种编程语言都在Web开发领域非常流行,各有优势和劣势。接下来,我们从语法、性能、可扩展性、框架、库和社区等方面,对PHP和Python进行比较和对比,帮助你做出最佳的选择。语法语法是编程语言的基础..

开发环境管理工具Conda,支持语言:Python, R, Scala, Java, Javascript, C/ C++, FORTRAN

Conda简介Conda是一个包依赖和环境管理工具,适用于: Python, R, Scala, Java, Javascript, C/ C++, FORTRAN多钟语言,比如在A服务器开发了一个应用,安装了N个包。现在要迁移到B服务器,又要重新安装一遍,还不知道..

为什么强大的C++编程语言的流行程度不及Java和Python?

摘要因为编译和运行都非常接近CPU,C++是非常强大的编程语言,C++使您的代码非常快,但您必须编写大量代码来实现。尤其是用C++进行多线程或异步编程,是最可怕的噩梦,很难使用。然而,现在使用的很多操作系统都是用..

SQL生成框架Vanna.ai用法教程

Vanna.ai 是一个SQL生成框架,可以帮助用户快速生成SQL语句。Vanna.ai提供了丰富的API,可以满足用户的各种需求。Vanna.ai 官网地址:https://vanna.ai/安装Vanna.ai要安装Vanna.ai,可以使用pip命令:pip install v..

Python 关键字 yield 的作用是什么?用来干什么的?

问题描述Python关键字 yield 的作用是什么?用来干什么的?返回了一个列表?返回了一个元素?被重复调用了么? 什么时候这个调用结束呢?比如,我正在试图理解下面的代码:def node._get_child_candidates(self, dist..

.NET MVC项目中使用node.js

在现代Web开发中,结合多种技术栈已经成为一种常见的做法。特别是在.NET MVC项目中,我们可以利用Node.js来增强项目的功能性和性能。本文将介绍如何在.NET MVC项目中集成和使用Node.js。首先,我们需要安装Node.js和..

发表回复

返回顶部