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编写百度贴吧的简单爬虫
Apr 02 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
python爬虫获取百度首页内容教学
Dec 23 Python
Python二元赋值实用技巧解析
Oct 25 Python
pytorch之添加BN的实现
Jan 06 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
python实现拼接图片
Mar 23 Python
iPython pylab模式启动方式
Apr 24 Python
python 利用zmail库发送邮件
Sep 11 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 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
mysql 搜索之简单应用
2007/04/27 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php 全文搜索和替换的实现代码
2008/07/29 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
python web框架学习笔记
2016/05/03 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
用python批量移动文件
2021/01/14 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
全球最大的游戏市场:G2A
2018/07/05 全球购物
运动会口号大全
2014/06/07 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
辩护词范文大全
2015/05/21 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js