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文件和目录操作详解
Feb 08 Python
Python中函数及默认参数的定义与调用操作实例分析
Jul 25 Python
python数字图像处理实现直方图与均衡化
May 04 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
linux环境中没有网络怎么下载python
Jul 07 Python
Python input函数使用实例解析
Nov 22 Python
Python类反射机制使用实例解析
Dec 30 Python
Python基础之函数嵌套知识总结
May 23 Python
详细介绍python类及类的用法
May 31 Python
Python中的套接字编程是什么?
Jun 21 Python
用Python可视化新冠疫情数据
Jan 18 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实现javascript的escape和unescape函数
2013/06/29 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
基python实现多线程网页爬虫
2015/09/06 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
python初步实现word2vec操作
2020/06/09 Python
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
财务部出纳岗位职责
2013/12/22 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
助学感谢信范文
2015/01/21 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
Python3中最常用的5种线程锁实例总结
2021/07/07 Python