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 卡死了。

