JavaScript 和 Python 代码也能结合使用?

JavaScript实现调用Python程序(附完整源码) 阅读详情

最近在 Github 上发现一个非常有意思的项目 PythonMonkey ,它可以让我们直接在 JavaScript 中运行 Python 代码,也可以在 Python 中运行 JavaScript 和 WebAssembly 代码,而且几乎没有性能损失。

PythonMonkey 是一个 Python 库,它使用 Mozilla 的 SpiderMonkey JavaScript 引擎构建,可以实现 Python 和 JavaScript 之间的互操作。它可以让 JavaScript 库能够在 Python 代码中无缝使用,反之亦然,而不会造成比较大的性能损失。例如,我们可以从 JavaScript 库中调用 NumPy 等 Python 包,或者直接从 Python 中使用 crypto-js 等 NPM 包。此外,使用 WebAssembly API 和 SpiderMonkey 引擎在 Python 中执行 WebAssembly 模块也变得非常简单。开发者也可以使用 PythonMonkey 重构用 Python 编写的代码改为在 JS 中执行,利用 SpiderMonkey 的即时编译器获得接近原生的速度。

PythonMonkey 还附带了 PMJS,这是一个类似于 Node.js 的 JavaScript 运行时环境,支持从 JavaScript 调用 Python 库。

下面是一个简单的 “hello world”示例,演示了从 JavaScript 生成的字符串并返回到 Python 上下文:

>>> import pythonmonkey as pm    >>> hello = pm.eval(" 'Hello World'.toUpperCase(); ")    >>> print(hello)    'HELLO WORLD'   

下面是一个复杂一点的示例,演示了将 Python print 函数作为参数传递给 JavaScript 函数,然后从 Python 调用该 JavaScript 函数:

>>> import pythonmonkey as pm      >>> hello = pm.eval("(func) => { func('Hello World!')}")      >>> hello(print)    Hello World!   

通过下面的写法我们可以直接在 JavaScript 代码中使用 Python 的 print 函数:

const pyPrint = python.eval("print");   pyPrint("Hello, World!"); // this outputs "Hello, World!"   

我觉得一个比较实用的应用场景就是我们可以轻松地将一个 JavaScript 库移植到 Python,而不需要承受使用 Python 重写库和维护迁移的巨大成本。JavaScript 比 Python 处理异步代码的能力要好很多。我们只需要做下面这样简单的操作:

my-javascript-module.js

exports.sayHello = () => { console.log('hello, world') };   

main.py

import pythonmonkey as pm   test = pm.require('./my-javascript-module');   test.sayHello() # this prints hello, world   

同样的,我们可以从 JavaScript 中通过 CommonJS 加载一个 Python 模块:

my-python-module.py

def getStringLength(s):     return len(s)      exports['getStringLength'] = getStringLength   

my-javascript-module.js

`const { getStringLength } = require('./my-python-module');      function printStringLength(s) {     console.log(`String: "${s}" has a length of ${getStringLength(s)}`);   }      module.exports = { printStringLength, };   `

main.py

import pythonmonkey as pm   test = pm.require('./my-javascript-module');   test.printStringLength("Hello, world!") # String: "Hello, world!" has a length of 13   

PythonMonkey 还利用了一些其他的 SpiderMonkey 功能,例如它的 WebAssembly (WASM) 引擎,它可以允许 Python 在沙箱中运行来自各种语言(例如 C、C++、Rust 等)的不受信任的 WASM 代码。

在 Python 中调用 WebAssembly 函数:

import asyncio   import pythonmonkey as pm      async def async_fn():     # read the factorial.wasm binary file     file = open('factorial.wasm', 'rb')     wasm_bytes = bytearray(file.read())        # instantiate the WebAssembly code     WebAssembly = pm.eval('WebAssembly')     wasm_fact = await WebAssembly.instantiate(wasm_bytes, {})        # return the "fac" factorial function from the wasm module     return wasm_fact.instance.exports.fac;      # await the promise which returns the factorial WebAssembly function   factorial = asyncio.run(async_fn())      # execute WebAssembly code in Python!   print(factorial(4)) # this outputs "24.0" since factorial(4) == 24   print(factorial(5)) # this outputs "120.0"   print(factorial(6)) # this outputs "720.0"   

还有更多的示例,我们可以查看 Github 上的例子:https://github.com/Distributive-Network/PythonMonkey-examples

目前已经有几个用于在 Python 中运行 JavaScript 的项目了,例如 JS2PY、PyV8 和 Metacall。

JS2Py 完全用 Python 实现,它消除了对 V8 或 SpiderMonkey 等大型引擎的需求。但是这种方法也有一些问题,如果不利用现有的 JavaScript 引擎,JS2Py 就无法从 V8 或 SpiderMonkey 等引擎在数百万人每天使用的浏览器中提供的强大、不断更新且经过验证的代码库中受益。此外,JS2Py 还缺少 WASM 引擎、对最新 JavaScript 规范 (ECMA-262) 的支持以及这些引擎内置的强大 JIT 等功能。现代异步 JS 编程中广泛使用的 JavaScript Promises 和 Async/Await 在 JS2Py 中也是缺失的,但在 PythonMonkey 中是可用的。使用 Python 编写,JS2Py 面临 SpiderMonkey 中不存在的性能限制;在 SunSpider JavaScript 基准测试报告显示:使用 PythonMonkey 比 JS2Py 快了 1162.5 倍。

PyV8 和 Cloudflare 的现代实现是 Google V8 JavaScript 引擎绑定的 Python 包装器。这意味着它的运行级别比 PythonMonkey 更低,并且不支持事件循环功能,例如 JavaScript 的 Promise 和 async/await。

Metacall 是一个可扩展、可嵌入和可互操作的跨平台多语言运行时,可与多种编程语言(例如 JavaScript、Python、Ruby、Rust、C#、Java 等)进行互操作。但是 Metacall 支持的广泛支持语言也是有代价的,并且需要在 Python 包之外的系统上安装额外的软件才能运行。此外,Metacall 会复制在 Python 和 JavaScript 之间传递的数据,而不是像 PythonMonkey 那样通过引用传递,从而导致性能影响。

虽然替代项目与 PythonMonkey 的模型有相似之处,但它们达不到 PythonMonkey 提出的互操作性、易用性和速度。

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
Python中调用和执行JavaScript 阅读详情

相关推荐

Python和JavaScript之间的代码转换工具

在本文中,我们介绍了四个常用的工具,用于在Python和JavaScript之间进行代码转换。有时候,我们可能需要将Python代码转换为JavaScript,或者将JavaScript代码转换为Python,以便在不同的项目中重用代码或实现跨平台的功能。在本文中,我们将介绍四个常用的工具,用于在Python和JavaScript之间进行代码转换。通过使用JS2Py,您可以将JavaScript代码转换为Python,并在Python环境中运行。

2301_79366332的博客 873

在Python中调用和执行JavaScript

在Web开发中,Python和JavaScript是两种常用的编程语言。Python通常用于服务器端开发,而JavaScript则用于客户端浏览器中的脚本编写。然而,有时候我们需要在Python中调用和执行JavaScript代码。本文将介绍如何在Python中实现这一目标。

博客 4417

python爬虫JS逆向必备:Python如何便捷的执行JavaScript代码,调用JS函数

Python如何便捷的执行JavaScript代码,调用JS函数

XiaoqiangClub的博客 1453

JavaScript可以在python语言中使用吗

是的,Python确实可以通过一些第三方包来使用JavaScript。 比如说,你可以使用pyodide包将JavaScript编译成Python可以执行的代码,或者使用pyexecjs包在Python中执行JavaScript代码。 不过,需要注意的是,Python和JavaScript是两种不同的编程语言,它们有自己的特性和用途。在选择使用哪种语言的时候,应该根据项目的需求和你的开发能力来做出...

weixin_42607969的博客 536

扣子(coze)实战 | 一键生成爆款书单视频

摘要:本文介绍了一个基于DeepSeek和Coze平台实现短视频高效生成的工作流方案。该方案耗时仅1-2分钟即可完成"假如书籍会说话"类短视频制作,包含书籍内容深度解读、对话台词生成、自动配音、素材合成等环节,支持通过剪映进行二次编辑。作者分享了完整开发思路和8个工作模块,并开放了包含该工具在内的100+智能体共享空间,提供会员专属服务。该方案为非真人出镜短视频的批量化生产提供了可行方案。

yueyehuguang的博客 2395

高数 | 【极限与等价无穷小】两个重要极限 & 经典错误 & 什么情况下求极限可以直接带入

一. 第一个重要极限 二. 第二个重要极限 三. 导数定义式 全文见【高等数学】两个重要的极限 - 知乎

"You are worthy! You can do it!" 6万+

一文让你弄懂Python如何契合JavaScript

JavaScript和Python都是极为流行的编程语言,并在前端开发和后端开发领域扮演着重要的角色。JavaScript凭借其在浏览器中的无可替代性,成为了动态网页和前端用户界面的首选语言。而Python以其简洁的语法和强大的库支持,在数据分析、机器学习、网络应用开发等领域广受欢迎。将这两种语言有机结合起来,可以在同一个项目中充分利用各自的优势,实现更加复杂和强大的功能。

weixin_68789096的博客 1568

SMR实战指南:从GWAS数据到eQTL分析的完整流程

本文提供了基于汇总数据的孟德尔随机化(SMR)实战指南,详细解析了如何从GWAS汇总数据出发,整合eQTL数据,完成从数据准备、BESD格式转换到最终SMR与HEIDI分析的完整流程。文章重点阐述了核心操作步骤、常见避坑技巧与结果解读,旨在帮助遗传学研究者高效掌握这一分析基因表达与复杂性状潜在因果关系的强大工具。

weixin_29246195的博客 1068

Python 潮流周刊#14:Lpython 高性能编译器、Python 与 JavaScript 实现互通

△点击上方“Python猫”关注 ,回复“1”领取电子书你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,本期分享的全部是英文材料。(标题取自其中两则分享,不代表全部内容都是该主题,特此声明。)本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python...

Python猫 421

解决Cursor AI工具地域限制报错的方法与原理

地理围栏(GEO-fencing)是现代云服务常用的访问控制技术,通过IP地址库匹配、支付系统验证等方式实现区域限制。在AI编程工具领域,这种技术常导致类似Cursor出现的'unsupported country region'报错。从技术实现看,服务商会综合HTTP头信息、时区设置等多维度数据进行地理位置判断。开发者可通过调整网络出口、配置本地模型或使用企业版等方案解决。本文以Cursor为例,详细分析了AI工具地域限制的底层原理,并提供了包括Ollama本地部署在内的多种工程实践方案,特别适合需要稳定

weixin_30820077的博客 957

IEC61850 通信协议测试验证实战指南:从理论到实践

本文提供了一份IEC61850通信协议从理论到实践的完整测试验证实战指南。针对MMS、GOOSE、SV三大核心协议,详细阐述了测试环境搭建、自动化脚本编写、性能与异常测试方法,并分享了常见避坑经验,旨在帮助工程师通过系统化的测试验证,确保电力自动化设备在现场的互联互通与稳定可靠运行。

neovim7hacker的博客 156

JavaScript 反混淆与 Python 执行JS

本文介绍了JavaScript反混淆的常用方法及Python执行JS代码的技术。反混淆技术包括代码美化、变量重命名、去除死代码、字符串解密、控制流平坦化反转等7种方法。Python执行JS代码主要通过两种方式实现:使用subprocess模块调用Node.js(推荐),或使用PyExecJS库自动寻找JavaScript运行时。文章详细说明了两种方法的安装步骤、代码示例和注意事项,为开发者处理混淆JS代码和跨语言调用提供了实用指南。

u013194310的博客 1094

AI Agent Harness Engineering 开发效率工具:Prompt工程、调试与监控平台

随着AI Agent技术从原型探索走向企业级落地,开发者普遍面临Prompt迭代无版本管控、Agent执行黑盒无法定位错误、上线后无监控导致故障频发、多团队协作效率低下四大核心痛点,据2024年LLMOps行业报告显示,没有配套工具链的Agent开发团队平均迭代周期是有工具链团队的6倍,线上故障率高达23%,平均资源浪费超过60%。

小白菜的博客 426

python如何执行js代码

在js逆向的过程中,一般来说思路有两种:读懂js代码,使用python直接改写js代码(这一种方法对javascript具有很高的要求)不进行js改写,使用python直接调用js代码(一般来说是使用这种方法进行逆向分析)看了很多文档,我总结出使用python如何调用js的三种方法,现在一一为大家讲解。当然:必须先安装 execjs 这个模块,当然你本机还需要安装node.js,js代码的执行是依靠node来进行执行的。

ak_bingbing的博客 1028

基于AOD-Net与GAN的深度学习去雾算法开发

本文提出一种结合AOD-Net与GAN的深度学习去雾算法。通过改进的AOD-GAN网络架构,集成风格迁移模块,设计包含对抗损失、内容损失和风格损失的复合目标函数。实验表明,该方法在PSNR(24.67)、SSIM(0.92)和FID(32.15)指标上优于传统方法,实现了端到端的物理模型引导图像去雾。未来将优化多尺度特征融合和轻量化部署。

huanghm88的专栏 594

SCI投稿Title Page、Cover letter、Highlights、Manuscript模板

(简要介绍一下论文的创新性). I hope this paper issuitable for “Journal Name”.版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.youkuaiyun.com/weixin_48615832/article/details/120317336。

qq_15963745的博客 3700

pythonnode js结合_结合node.js和Python

这听起来像是zeroMQ非常适合的场景。它是一个类似于使用TCP或Unix套接字的消息传递框架,但是它更加健壮(http://zguide.zeromq.org/py:all)有一个库使用zeroMQ来提供一个运行良好的RPC框架。它叫做zeroRPC(http://www.zerorpc.io/)。这里是“你好世界”。Python“Hello x”服务器:import zerorpcclass ...

weixin_39588104的博客 241

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Js逆向分析+Python爬虫结合

Js逆向分析+Python爬虫结合

weixin_45565886的博客 3084

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【js逆向专题】4.python调用JS和扣代码

PyExecJS是一个 Python 库,用于在 Python 环境中执行 JavaScript 代码。它实际上是对 ExecJS 库的 Python 封装,ExecJS 本身是一个通用的 JavaScript 运行环境的抽象层。使用PyExecJS,你可以在 Python 中执行 JavaScript 代码,而无需启动一个完整的 JavaScript 解释器。

情不知所起一往而深 3726

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python运行js代码_python 3 如何使用js2py运行javascript代码

1首先,使用命令pip install来安装Js2Py。这个包可将js代码翻译为python代码(需要依赖Js2Py才能执行的python代码),也可以作为一个VM直接运行javascript。2第一种用法,是使用js2py的eval_js函数。该函数会返回在python里包装的等价js对象。如图,通过eval_js获取一个函数对象并使用。3第二种使用方式是先调用EvalJs获取一个运行的cont...

weixin_39933438的博客 549

Python 解析 HTML 并提取所有 JavaScript 代码块

通过本文,我们学习了如何使用 Python 的 BeautifulSoup 库来解析 HTML 并提取所有的 JavaScript 代码块。这种方法不仅适用于简单的 HTML 文件,还可以扩展到更复杂的场景,例如处理动态生成的内容或大型网站的 HTML 页面。如果你需要进一步增强功能,例如支持外部 JavaScript 文件或处理压缩后的代码,可以结合其他工具如正则表达式或第三方库(如 PyExecJS)来实现更高级的功能。```

2501_91169850的博客 1573

JavaScript逆向如何调用逆向出来的JS代码

在JavaScript逆向中,我们往往是将浏览器的JavaScript代码在本地还原,执行后获取逆向结果。然尔JavaScript逆向基本都是为Python爬虫服务的,所以我们经常需要在Python代码中调用JavaScript代码。本文详细介绍了几种常用的方法。

SamsongSSS的博客 1967

python调用js-Python调用JavaScript代码的方法

准备阶段:以一段简单的JS脚本为例,将代码写入到文件中,其中,定义了一个方法,计算两个数的和。//norm.js//计算两个数的和function add(num1, num2) {return num1 + num2;}方法一、PyExecJSPyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码支持的 JS 环境包含:Node.js、PyV8、Phanto...

weixin_39785814的博客 456

js如何运行python代码_手把手教你如何使用Python执行js代码

前言各位小伙伴,大家好,这次咱们来说一下关于爬虫方向的一个知识,Python如何执行js,快来看看吧!!!为什么要引出Python执行js这个问题?都说术业有专攻,每个语言也都有自己的长处和短处。在爬虫方向,Python绝对是扛把子,近几年随着AI的火爆,需要各种各样的数据,所以,爬虫需求也跟着水涨船高起来。我们做爬虫的当然是爬的爽,但是估计人家后台在骂街,毕竟谁都不希望自己的数据被弄走,所以后台...

weixin_35353583的博客 3199

Python.js 使用教程

Python.js 使用教程 1、项目介绍 Python.js 是一个开源项目,旨在将 Python 代码转换为 JavaScript 代码,从而使得 Python 开发者能够在浏览器或 Node.js 环境中运行他们的代码。该项目利用了 Python 的语法特性,并将其转换为高效的 JavaScript 代码,以便在不同的平台上运行。 2、项目快速启动 安装 首先,你需要克隆项目仓库到本地: g...

gitblog_00745的博客 713

python操作js中的输入_Python调用JavaScript代码的方法

准备阶段:以一段简单的JS脚本为例,将代码写入到文件中,其中,定义了一个方法,计算两个数的和。//norm.js//计算两个数的和functionadd(num1,num2){returnnum1+num2;}方法一、PyExecJSPyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码支持的 JS 环境包含:Node.js、PyV8、Phanto...

weixin_30113575的博客 699
上一篇: python路径获取那些事儿
下一篇: Python哪种方式循环最快,或许颠覆你的认知!
Python_P叔
博客等级 码龄3年 5451粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值