Python调用JavaScript代码的方法


Posted in Python onOctober 27, 2020

准备阶段:

以一段简单的JS脚本为例,将代码写入到文件中,其中,定义了一个方法,计算两个数的和。

//norm.js

//计算两个数的和

function add(num1, num2) {

   return num1 + num2;

}

方法一、PyExecJS

PyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码支持的 JS 环境包含:Node.js、PyV8、PhantomJS、Nashorn 等

首先,我们需要安装依赖包 PyExecJS

//py_exec_js_demo.py

  

//安装依赖

pip3 install PyExecJS

然后,从 JS 文件中读取源码

def js_from_file(file_name):

    """

    读取js文件

    :return:

    """

    with open(file_name, 'r', encoding='UTF-8') as file:

        result = file.read()

  

return result

最后,使用 execjs 类的compile()方法编译加载上面的 JS 字符串,返回一个上下文对象

  

import execjs

  

from js_code import *

  

# 编译加载js字符串

context1 = execjs.compile(js_from_file('./norm.js'))

最后,调用上下文对象的call() 方法执行 JS 方法

其中,参数包含:JS 代码被调的方法名、对应方法的传入参数

  

# 调用js代码中的add()方法,参数为2和3

# 方法名:add

# 参数:2和3

result1 = context1.call("add", 2, 3)

  

print(result1)

需要注意的,由于 PyExecJS 运行在本地 JS 环境下,使用之前会启动 JS 环境,最终导致运行速度会偏慢。

方法二、js2py

js2py作为一个纯 Python 实现的 JS 解释器,可以完全脱离 JS 环境,直接将 JS 代码转换为 Python 代码

首先,安装依赖库

# 安装依赖库

pip3 install js2py

然后使用 js2py 中的EvalJs()方法生成一个上下文对象

# 使用获取上下js2py生成一个上下文环境

context = js2py.EvalJs()

接着利用上下文对象执行 JS 脚本,转换为 Python 代码

# 执行整段JS代码

context.execute(js_content)

最后,利用上下文调用 JS 中的方法,并制定输入参数即可

# 使用上下文context调用具体的函数

# 函数名:add

# 参数:1,2

result = context.add(1, 2)

print(result)

方式三、Node.js

实际上是使用 Python 的os.popen执行 node 命令,执行 JS 脚本

首先,确保本地已经安装了 Node.js 环境,修改 JS 脚本,新增一个导出函数 init ,方便内部函数被调用

//计算两个数的和

function add(num1, num2) {

    return num1 + num2;

}

  

//新增一个导出函数(node方式)

module.exports.init = function (arg1, arg2) {

    //调用函数,并返回

    console.log(add(arg1, arg2));

};

然后,将调用 JS 方法的命令组成一个字符串

# 组成调用js的命令

# node命令:node -e

cmd = 'node -e "require(\\"%s\\").init(%s,%s)"' % ('./norm', 3, 5)

最后,通过 os.popen 执行命令即可

pipeline = os.popen(cmd)

  

# 读取结果

result = pipeline.read()

  

print('结果是:', result)

以上就是Python调用JavaScript代码的方法的详细内容,更多关于Python调用JavaScript代码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
python 日期排序的实例代码
Jul 11 Python
python+tkinter实现学生管理系统
Aug 20 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
弄清Pytorch显存的分配机制
Dec 10 Python
Python爬虫开发与项目实战
Dec 16 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
Python加密技术之RSA加密解密的实现
Apr 08 Python
Pycharm中如何关掉python console
Oct 27 #Python
python和C++共享内存传输图像的示例
Oct 27 #Python
安装Anaconda3及使用Jupyter的方法
Oct 27 #Python
Python通过yagmail实现发送邮件代码解析
Oct 27 #Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 #Python
Python字符串查找基本操作代码案例
Oct 27 #Python
Python爬取豆瓣数据实现过程解析
Oct 27 #Python
You might like
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
JS打印组合功能
2016/08/04 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python内建数据结构详解
2016/02/03 Python
python版学生管理系统
2018/01/10 Python
python-numpy-指数分布实例详解
2019/12/07 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
公司介绍信范文
2015/01/31 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书