Python中如何调用Node.js并获取执行结果?
python 用 os.popen 调用 node 然后取结果
Python中如何调用Node.js并获取执行结果?
4 回复
用 execjs 啊
import subprocess
import json
import os
def run_node_script(script_path, args=None):
"""
执行Node.js脚本并获取结果
Args:
script_path: Node.js脚本路径
args: 传递给Node.js脚本的参数列表
Returns:
脚本执行结果(如果是JSON会自动解析为Python对象)
"""
# 构建命令
cmd = ['node', script_path]
if args:
cmd.extend(args)
try:
# 执行Node.js脚本
result = subprocess.run(
cmd,
capture_output=True,
text=True,
check=True
)
# 尝试解析JSON输出
try:
return json.loads(result.stdout.strip())
except json.JSONDecodeError:
return result.stdout.strip()
except subprocess.CalledProcessError as e:
raise RuntimeError(f"Node.js执行失败: {e.stderr}")
# 示例:调用一个返回JSON的Node.js脚本
if __name__ == "__main__":
# 创建示例Node.js脚本
node_code = """
// 示例Node.js脚本:计算斐波那契数列
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
const num = process.argv[2] ? parseInt(process.argv[2]) : 10;
const result = fibonacci(num);
// 输出JSON格式结果
console.log(JSON.stringify({
input: num,
fibonacci: result,
message: `斐波那契数列第${num}项是${result}`
}));
"""
# 保存临时脚本文件
with open('temp_fib.js', 'w', encoding='utf-8') as f:
f.write(node_code)
try:
# 调用Node.js脚本并传递参数
result = run_node_script('temp_fib.js', ['15'])
print(f"Node.js返回结果: {result}")
print(f"类型: {type(result)}")
finally:
# 清理临时文件
if os.path.exists('temp_fib.js'):
os.remove('temp_fib.js')
核心就这几步:用subprocess调用node命令,捕获输出,需要JSON就解析一下。记得处理异常和清理临时文件。
我说调用 nodejs 不是 js
直接用 execjs 执行 node 代码得出返回值便是,为什么要再去用 os 去调 node 命令行? 要是涉及到浏览器执行 js 就 pyppeteer 或者进一步封装的 requests_html 去执行 js 代码,也不需要用到你说的那种,如果我没理解错你的问题的话,感觉你现在选取的技术策略有那么一点问题

