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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
python中dir函数用法分析
Apr 17 Python
Python二分法搜索算法实例分析
May 11 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
python爬虫使用cookie登录详解
Dec 27 Python
Python unittest单元测试框架总结
Sep 08 Python
机器学习实战之knn算法pandas
Jun 22 Python
Python3列表List入门知识附实例
Feb 09 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python docutils文档编译过程方法解析
Jun 23 Python
python-for x in range的用法(注意要点、细节)
May 10 Python
asyncio异步编程之Task对象详解
Mar 13 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判断网页是否gzip压缩
2013/06/25 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP序列化操作方法分析
2016/09/28 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python全局变量引用与修改过程解析
2020/01/07 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
教师自荐信范文
2013/12/09 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
医院见习报告范文
2014/11/03 职场文书
2014年司法局工作总结
2014/12/11 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
Python time库的时间时钟处理
2021/05/02 Python
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
MySQL里面的子查询的基本使用
2021/08/02 MySQL