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修改MP3文件的方法
Jun 15 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
linux环境下Django的安装配置详解
Jul 22 Python
python3实现绘制二维点图
Dec 04 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
Python unittest生成测试报告过程解析
Sep 08 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 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计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
JS实现多物体运动的方法详解
2018/01/23 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
详解微信UnionID作用
2019/05/15 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python中遍历文件的3个方法
2014/09/02 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
利用Python破解斗地主残局详解
2017/06/30 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
校运会口号
2014/06/18 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python