Python中如何调用JavaScript代码?
通过 execjs 调用 js 代码的时候只能通过函数获取值吗? 能调用后直接获取变量值吗? _js = open(qiMingJsPath, 'r').read() data = execjs.compile(_js).call('n', json_data['data1'])
Python中如何调用JavaScript代码?
2 回复
在Python里调用JS代码,主要有两种主流方式,一种是用Node.js环境,另一种是用浏览器引擎。
1. 用 subprocess 调用 Node.js
这是最直接的方法,适合运行独立的JS脚本。你把JS代码写进文件或者字符串,然后用Python的subprocess模块去调用node命令执行它。
import subprocess
import json
# 你的JS代码,这里计算斐波那契数列
js_code = """
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
const result = fib(10);
console.log(JSON.stringify({result: result}));
"""
# 执行JS代码
process = subprocess.run(
['node', '-e', js_code], # '-e' 表示执行后面字符串里的代码
capture_output=True,
text=True
)
# 获取输出并解析JSON
if process.returncode == 0:
output = json.loads(process.stdout.strip())
print(f"斐波那契数列第10项是: {output['result']}") # 输出: 斐波那契数列第10项是: 55
else:
print("执行出错:", process.stderr)
2. 用 PyExecJS 库
这个库提供了一个通用接口,背后可以调用Node.js、PhantomJS等多种JS引擎。用起来更Pythonic一些。
import execjs
# 创建JS运行时环境(需要系统已安装Node.js)
ctx = execjs.get()
# 直接执行JS代码字符串
js_code = """
function greet(name) {
return "Hello, " + name + "!";
}
"""
ctx.eval(js_code) # 先加载函数
# 调用JS函数
result = ctx.call("greet", "World")
print(result) # 输出: Hello, World!
3. 用 js2py 库
这个比较黑科技,它是个纯Python的JS解释器,不需要额外安装JS运行时。但功能和支持的ES标准可能有限,适合简单的场景。
import js2py
# 将JS代码转换为Python可执行对象
js_code = """
function add(a, b) {
return a + b;
}
add
"""
add_func = js2py.eval_js(js_code)
# 像调用Python函数一样调用它
result = add_func(5, 3)
print(result) # 输出: 8
总结建议
简单命令用subprocess,想写起来方便用PyExecJS,没Node环境又想轻量试试js2py。
cxt = execjs.compile(_js)
print(cxt.eval(‘变量名’))

