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保存字符串到文件的方法
Jul 01 Python
Python中的变量和作用域详解
Jul 13 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
pytorch 数据集图片显示方法
Jul 26 Python
面向初学者的Python编辑器Mu
Oct 08 Python
python项目对接钉钉SDK的实现
Jul 15 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
python如何进行矩阵运算
Jun 05 Python
如何写python的配置文件
Jun 07 Python
pandas统计重复值次数的方法实现
Feb 20 Python
Opencv实现二维直方图的计算及绘制
Jul 21 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
PHPlet在Windows下的安装
2006/10/09 PHP
PHP 高手之路(二)
2006/10/09 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
python编写简单爬虫资料汇总
2016/03/22 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
如何利用python查找电脑文件
2018/04/27 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
大学生优秀班干部事迹材料
2014/05/26 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
工厂标语大全
2014/10/06 职场文书
财务总监岗位职责
2015/02/03 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android