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面向对象编程中的类和对象学习教程
Mar 30 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
pip安装python库的方法总结
Aug 02 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
Python random库使用方法及异常处理方案
Mar 02 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
python右对齐的实例方法
Jul 05 Python
python中操作文件的模块的方法总结
Feb 04 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
PHP4中session登录页面的应用
2008/07/25 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
简单实现PHP留言板功能
2016/12/21 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
Javascript !!的作用
2008/12/04 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
python 日期操作类代码
2018/05/05 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
健康教育主题班会
2015/08/14 职场文书
服务行业标语口号
2015/12/26 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis