Python中比较好的执行JavaScript代码的方法是什么?如果JS代码中出现中文,该怎么处理?

null
Python中比较好的执行JavaScript代码的方法是什么?如果JS代码中出现中文,该怎么处理?

2 回复

对于在Python里跑JS,我一般用PyExecJS或者Node.js子进程。PyExecJS算是封装得比较好的,但底层其实也是调系统里的JS引擎(比如Node)。如果项目里本来就有Node环境,直接用subprocess调可能更直接,性能也更好。

处理中文的关键是编码。你得确保字符串在Python和JS之间传递时用UTF-8。比如用subprocess时,把字符串按UTF-8编码成字节流传给Node,输出结果再解码回来。用PyExecJS的话,它内部一般会处理,但如果遇到乱码,可以检查下环境默认编码。

给个subprocess的例子:

import subprocess
import json

# 假设有一段带中文的JS代码
js_code = """
function greet(name) {
    return "你好," + name;
}
console.log(JSON.stringify(greet("世界")));
"""

# 通过Node执行
result = subprocess.run(
    ['node', '-e', js_code],
    capture_output=True,
    text=True,  # 自动解码,默认用系统编码,建议下面显式指定UTF-8
    encoding='utf-8'
)

# 输出结果
print(result.stdout)  # 输出: "你好,世界"

如果用PyExecJS,先装包(pip install PyExecJS),然后:

import execjs

# 创建上下文并执行带中文的JS
ctx = execjs.compile("""
    function greet(name) {
        return "你好," + name;
    }
""")
print(ctx.call("greet", "世界"))  # 输出: 你好,世界

注意PyExecJS需要系统里有JS运行时(如Node)。如果遇到编码问题,可以试试在JS代码里显式指定console.log的编码,或者检查Python侧的默认编码设置。

总结:优先用Node子进程,注意UTF-8编码。


同问,现在执行 JS 的库有什么好用的轮子吗? 打开个网页,永远页面显示的和 PY 拉到的不同。被 JS 卡死了。

回到顶部