PyExecJS 提供了 Javascript 的运行环境,可以让 Python 执行 Javascript 代码
下载
1 | $ pip install PyExecJS |
例子
这是一个官方的例子1
2
3
4
5
6
7
8
9
10>>> import execjs
>>> execjs.eval("'red yellow blue'.split(' ')")
['red', 'yellow', 'blue']
>>> ctx = execjs.compile("""
function add(x, y) {
return x + y;
}
""")
>>> ctx.call("add", 1, 2)
3
使用起来很简单,自己编写方法时,只需要先编译就可以直接调用自定义函数。
不过单纯的调用 JS 的场景并不多,只是这样的话,还不如直接写 Python 代码,更有用
处的是在 Node 环境中
调用 Node
假设我有一个压缩 JS 的工具要实现,我又不想单独搞一套 Node 的线上环境,这时候我
们就可以直接在 Python 中调用。
首先由 index.js
文件实现功能1
2
3
4
5var uglifyjs = require('uglify-js');
const test = (text) => {
return uglifyjs.minify(text);
}
接着创建 Python 文件 app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy([email protected])
import os
import execjs
import json
os.environ["EXECJS_RUNTIME"] = "Node"
os.environ["NODE_PATH"] = os.getcwd()+"/node_modules"
f = open(os.getcwd() + "/index.js")
text = f.read()
parser = execjs.compile(text)
if __name__ == "__main__":
obj = parser.call("test", 'function add(first, second) { return first + second; }')
print(obj) # {'code': 'function add(n,d){return n+d}'}
执行 app.py
即可
在上面的例子中1
2os.environ["EXECJS_RUNTIME"] = "Node"
os.environ["NODE_PATH"] = os.getcwd()+"/node_modules"
这两行起到关键作用,指明 runtime
为 Node,并将 node_modules
目录加入到环境
变量中,其他操作就都跟 JS 一样了。
上述例子完成 DEMO 在 GitHub 中