python如何运行js语句


Posted in Python onSeptember 09, 2020

1. 安装

pip install PyExecJS  # 需要注意, 包的名称:PyExecJS

2. 简单使用

import execjs
execjs.eval("new Date")
返回值为: 2018-04-04T12:53:17.759Z
execjs.eval("Date.now()")
返回值为:1522847001080  # 需要注意的是返回值是13位, 区别于python的time.time()

需要注意的是: 个别的JS语句, 用execjs返回的结果跟浏览器环境返回的结果是有区别的, 以下是浏览器环境返回的结果:

python如何运行js语句

3. 调用函数

# 实际生产中处理的js有几百几千行, 不方便贴上来。来看一下源码中给的例子:
  ctx = execjs.compile("""
        function add(x, y) {
                return x + y;
           }
""")
  ctx.call("add", 1, 2)  # 第一个参数 “add” 为JS函数名的字符串, 后边依次为实参
  返回值:3

execjs的用法非常简单, 下边来看一下执行JS的环境, 以及性能:

4. 执行JS的环境

在windows上不需要其他的依赖便可运行execjs, 也可以调用其他的JS环境

windows 默认的执行JS的环境
execjs.get().name
返回值: JScript
作者本人的windows上装有Node.js , 所以返回值不同
execjs.get().name
返回值: Node.js (V8)

在ubuntu下需要安装执行JS环境依赖, 作者的环境为PhantomJS

execjs.get().name
返回值: PhantomJS

源码中给出, 可执行execjs的环境:

PyV8         = "PyV8"
Node         = "Node"
JavaScriptCore    = "JavaScriptCore"
SpiderMonkey    = "SpiderMonkey"
JScript       = "JScript"
PhantomJS      = "PhantomJS"
SlimerJS       = "SlimerJS"
Nashorn       = "Nashorn"

在ubuntu环境下,没有JS环境会报错:Could not find an available JavaScript runtime. 由此可见,execjs在ubuntu需要安装JS环境 。具体的JS环境需根据具体的需求安装, 切不可超过以上8种。

5.环境切换

通过os.environ

os.environ["EXECJS_RUNTIME"] = "Node"
execjs.get().name
execjs.eval("1 + 2")

通过execjs.get 切换

jscript = execjs.get(execjs.runtime_names.JScript)  # runtime_names 便是execjs源码中给出的执行环境的。 
execjs.runtime_names.xxx  xxx必须在上一节 #3中取
jscript.eval("1 + 2")

注: 在切换环境时, 当环境不存在不会报错, 会使用默认的环境。 另外需要注意的是, 两种方式的区别

6. 简易性能分析

# 只简单试了三种, 在windows下
import  execjs
import os
import time
# 先用JScript
os.environ["EXECJS_RUNTIME"] = "JScript"
print execjs.get().name
time1 = time.time()
for i in range(100):
    execjs.eval("new Date")
print time.time() - time1
# 切换环境 使用Nodejs
os.environ["EXECJS_RUNTIME"] = "Node"
print execjs.get().name
time2 = time.time()
for l in range(100):
    execjs.eval("new Date")
print time.time() - time2
# 打印的结果为:
JScript
4.70900011063
Node.js (V8)
27.501999855
# 在ubuntu下试的是PhantoJS , 结果竟然高达 30+ S

以上就是python如何运行js语句的详细内容,更多关于python运行js语句实例的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中Flask框架简单入门实例
Mar 21 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
Python异常处理操作实例详解
May 10 Python
python matlibplot绘制3D图形
Jul 02 Python
Python数据集切分实例
Dec 08 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
python如何把字符串类型list转换成list
Feb 18 Python
Python中的全局变量如何理解
Jun 04 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 Python
python如何爬取动态网站
Sep 09 #Python
python如何停止递归
Sep 09 #Python
python能做哪些生活有趣的事情
Sep 09 #Python
Python 连接 MySQL 的几种方法
Sep 09 #Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 #Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 #Python
Python列表推导式实现代码实例
Sep 09 #Python
You might like
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
学习php开源项目的源码指南
2014/12/21 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
javascript import css实例代码
2008/07/18 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
Node.js学习入门
2017/01/03 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
应届生污水处理求职信
2013/11/06 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL