问题
导入import execjs时,运行
print(execjs.get().name)
得到的结果是JScript。
执行js代码老是报错execjs._exceptions.ProgramError: SyntaxError: 语法错误
。
后来百度发现execjs的运行环境要是Node.js (v8)。
搜到了几个解决方法,这个方法是最有效的:PyExecJS 使用不在环境变量中的本地Node环境执行JavaScript代码
解决
自定义execjs运行环境
# 导入 PyExecJS 模块
import execjs
import execjs._runner_sources as _runner_sources
# 创建 JavaScript 运行时 对象
# 参数中的 command 并不重要,传入空字符串即可
local_node_runtime = execjs.ExternalRuntime(
name="Node.js (V8) local",
command='',
encoding='UTF-8',
runner_source=_runner_sources.Node
)
# 这里是重点,需要强制性修改
local_node_runtime._binary_cache = ['D:/software/nodejs/node.exe']
local_node_runtime._available = True
# 将刚创建好的 JavaScript 运行时 注册至 PyExecJS 中
execjs.register('local_node', local_node_runtime)
# 待运行的 JavaScript 代码
js_code = '''
function sum(a, b) {
return a + b
}
'''
# 通过 execjs 的 get 方法,即可调用刚才注册到 PyExecJS 的 JavaScript 运行时
ctx = execjs.get('local_node').compile(js_code)
result = ctx.call('sum', 1, 2)
print(result)