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(‘变量名’))

回到顶部