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简单删除目录下文件以及文件夹的方法
May 27 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
Python 实现随机数详解及实例代码
Apr 15 Python
python中hashlib模块用法示例
Oct 30 Python
Python面向对象类继承和组合实例分析
May 28 Python
Python用for循环实现九九乘法表
May 31 Python
Python使用while循环花式打印乘法表
Jan 28 Python
python实现视频分帧效果
May 31 Python
Django实现基于类的分页功能
Oct 31 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
python中sklearn的pipeline模块实例详解
May 21 Python
学python爬虫能做什么
Jul 29 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代码
2007/03/08 PHP
PHP中读写文件实现代码
2011/10/20 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
关于python的list相关知识(推荐)
2017/08/30 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
django从后台返回html代码的实例
2020/03/11 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
学生自我评价范文
2014/02/02 职场文书
聘用意向书范本
2014/04/01 职场文书
教师考核评语
2014/04/28 职场文书
建筑横幅标语
2014/10/09 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL