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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
zbar解码二维码和条形码示例
Feb 07 Python
python抓取百度首页的方法
May 19 Python
Python中的with...as用法介绍
May 28 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python经典趣味24点游戏程序设计
Jul 26 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
Python实现Hash算法
Mar 18 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
Js组件的一些写法
2010/09/10 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
深入理解React高阶组件
2017/09/28 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python中模块string.py详解
2017/03/12 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
学校安全生产月活动总结
2014/07/05 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
办公室禁烟通知
2015/04/23 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Ajax实现异步加载数据
2021/11/17 Javascript
浅谈Vue的computed计算属性
2022/03/21 Vue.js
Java的Object类的九种方法
2022/04/13 Java/Android