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装饰器decorator用法实例
Nov 10 Python
Python代码调试的几种方法总结
Apr 15 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
Python 实现域名解析为ip的方法
Feb 14 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Python安装whl文件过程图解
Feb 18 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
python属于哪种语言
Aug 16 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
Django使用echarts进行可视化展示的实践
Jun 10 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的FTP学习(三)
2006/10/09 PHP
php xml-rpc远程调用
2008/12/19 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
js制作提示框插件
2020/12/24 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
python实现PID算法及测试的例子
2019/08/08 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
python tqdm库的使用
2020/11/30 Python
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
护理不良事件检讨书
2014/02/06 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书