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下的Mysql模块MySQLdb安装详解
Apr 09 Python
python socket 超时设置 errno 10054
Jul 01 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
替换python字典中的key值方法
Jul 06 Python
解决python中无法自动补全代码的问题
Dec 04 Python
Django缓存系统实现过程解析
Aug 02 Python
python opencv实现证件照换底功能
Aug 19 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
python获取字符串中的email
Mar 31 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
PHP的全局错误处理详解
2016/04/25 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
Python中with及contextlib的用法详解
2017/06/08 Python
python获取txt文件词向量过程详解
2019/07/05 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
农村婚礼证婚词
2014/01/08 职场文书
2014年大学生自我评价
2014/01/19 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
婚前保证书
2014/04/29 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2015年酒店工作总结
2015/04/28 职场文书
质量承诺书格式范文
2015/04/28 职场文书
超市员工辞职信范文
2015/05/12 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书