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 httplib,smtplib使用方法
Sep 06 Python
python实现中文分词FMM算法实例
Jul 10 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Python callable()函数用法实例分析
Mar 17 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
python Django的web开发实例(入门)
Jul 31 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
基于Django集成CAS实现流程详解
Nov 28 Python
python+playwright微软自动化工具的使用
Feb 02 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 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 cout<<的一点看法
2010/01/24 PHP
php实现微信支付之企业付款
2018/05/30 PHP
详解PHP PDO简单教程
2019/05/28 PHP
奇妙的js
2007/09/24 Javascript
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
Python修改列表值问题解决方案
2020/03/06 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
前台接待岗位职责
2013/12/03 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
承诺书怎么写
2014/03/26 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
二手车转让协议书
2015/01/29 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
JavaScript实现班级抽签小程序
2021/05/19 Javascript