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 自动补全(vim)
Nov 30 Python
python中list常用操作实例详解
Jun 03 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
python一键升级所有pip package的方法
Jan 16 Python
教你学会使用Python正则表达式
Sep 07 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
简单了解django orm中介模型
Jul 30 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
详解python 中in 的 用法
Dec 12 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 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 高级课程笔记 面向对象
2009/06/21 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
canvas的神奇用法
2017/02/03 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
Python Subprocess模块原理及实例
2019/08/26 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
python网络编程之五子棋游戏
2020/05/14 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
生产部岗位职责范文
2014/02/07 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书