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 相关文章推荐
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
Django 实现下载文件功能的示例
Mar 06 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
Python3实现建造者模式的示例代码
Jun 28 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
Python Matplotlib绘制动画的代码详解
May 30 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
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python smallseg分词用法实例分析
2015/05/28 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
什么是SCM(软件配置管理)
2014/08/16 面试题
创业计划书六个要素
2013/12/26 职场文书
新手上路标语
2014/06/20 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
停电放假通知
2015/04/14 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
Java死锁的排查
2022/05/11 Java/Android