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获取央视节目单的实现代码
Jul 25 Python
python实现备份目录的方法
Aug 03 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
详解python 内存优化
Aug 17 Python
opencv实现图像平移效果
Mar 24 Python
Pandas自定义选项option设置
Jul 25 Python
Python进行区间取值案例讲解
Aug 02 Python
bat批处理之字符串操作的实现
Mar 16 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
使用 MySQL Date/Time 类型
2008/03/26 PHP
ajax php 实现写入数据库
2009/09/02 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
潜说js对象和数组
2011/05/25 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python中下划线的使用方法
2015/03/27 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python中的默认参数详解
2015/06/24 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
个人自荐材料
2014/05/23 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
万能检讨书
2015/01/27 职场文书
通知书大全
2015/04/27 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
人生感悟经典句子
2019/08/20 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技