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中的tuple元组详细介绍
Feb 02 Python
python通过pil模块将raw图片转换成png图片的方法
Mar 16 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
如何在python中实现线性回归
Aug 10 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
帝国cms目录结构分享
2015/07/06 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
Date对象格式化函数代码
2010/07/17 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
python实现定时同步本机与北京时间的方法
2015/03/24 Python
代码分析Python地图坐标转换
2018/02/08 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
pycharm安装和首次使用教程
2018/08/27 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
采购员岗位职责
2013/11/15 职场文书
英语专业推荐信
2013/11/16 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
初婚初育证明
2014/01/14 职场文书
园林系毕业生求职信
2014/06/23 职场文书
毕业论文致谢词
2015/05/14 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书