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标准算法实现数组全排列的方法
Mar 17 Python
Python文本统计功能之西游记用字统计操作示例
May 07 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
详解js文件通过python访问数据库方法
Mar 03 Python
如何在Python中实现goto语句的方法
May 18 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
python跨文件使用全局变量的实现
Nov 17 Python
python 获取剪切板内容的两种方法
Nov 28 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
PHP+DBM的同学录程序(3)
2006/10/09 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
JQuery 文本框使用小结
2010/05/22 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
详解vuex的简单使用
2018/03/12 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
JS数据类型分类及常用判断方法
2020/11/19 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
Python OS模块常用函数说明
2015/05/23 Python
Python模拟百度登录实例详解
2016/01/20 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Keras实现DenseNet结构操作
2020/07/06 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
乔迁之喜答谢词
2015/01/05 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
2016年教师新年寄语
2015/08/18 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
php png失真的原因及解决办法
2021/10/24 PHP