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开发之函数定义实例分析
Nov 12 Python
Python设置默认编码为utf8的方法
Jul 01 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
Python中的asyncio代码详解
Jun 10 Python
python语言基本语句用法总结
Jun 11 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
django 类视图的使用方法详解
Jul 24 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
提升python处理速度原理及方法实例
Dec 25 Python
Python如何读写二进制数组数据
Aug 01 Python
pyqt5打包成exe可执行文件的方法
May 14 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 session 预定义数组
2009/03/16 PHP
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
浅谈Express异步进化史
2017/09/09 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
Python实现批量读取word中表格信息的方法
2015/07/30 Python
python实现SMTP邮件发送功能
2020/06/16 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
python Celery定时任务的示例
2018/03/13 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python mock测试的示例
2020/10/19 Python
python Gabor滤波器讲解
2020/10/26 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
为什么UNION ALL比UNION快
2016/03/17 面试题
迎新晚会主持词
2014/03/24 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2014年导购员工作总结
2014/11/18 职场文书