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的Bottle框架中使用微信API的示例
Apr 23 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python hashlib模块用法实例分析
Jun 12 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
Python中的引用和拷贝实例解析
Nov 14 Python
centos7中安装python3.6.4的教程
Dec 11 Python
关于Django Models CharField 参数说明
Mar 31 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
python实现的人脸识别打卡系统
May 08 Python
python图像处理 PIL Image操作实例
Apr 09 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python文件操作方法详解
2020/02/09 Python
python如何将图片转换素描画
2020/09/08 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
什么是规则表达式
2012/05/03 面试题
关于梦想的演讲稿
2014/05/05 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫