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 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
python Django连接MySQL数据库做增删改查
Nov 07 Python
python实现excel读写数据
Mar 02 Python
详解python3中的真值测试
Aug 13 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
基于Python采集爬取微信公众号历史数据
Nov 27 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 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 数据结构 算法 三元组 Triplet
2011/07/02 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
python ddt实现数据驱动
2018/03/14 Python
python实现机器学习之多元线性回归
2018/09/06 Python
使用TensorFlow实现SVM
2018/09/06 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
小学教师办公室制度
2014/02/03 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
大学生入党自荐书
2015/03/05 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python