You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS项目中如何向Python脚本传输数据并获取处理反馈?

Node.js 调用 Python 脚本并实现数据交互

完善方案说明

你的现有代码已实现基础的标准输入数据传递,但缺少 Python 处理结果回传给 Node.js 的逻辑,且 Node.js 端未监听 Python 输出。以下是补全后的完整实现,包含数据发送、结果接收与错误处理。

完整代码实现

Node.js 端

需监听子进程的stdout获取 Python 输出,同时通过stderr捕获执行错误,建议每次调用创建新子进程避免复用导致的异常:

const { spawn } = require('child_process');

async function start() {
  // 每次调用创建新的 Python 子进程
  const pyProcess = spawn('python3', ['process.py']);
  const data = [1, 2, 3, 4, 5];

  // 向 Python 发送序列化后的 JSON 数据
  pyProcess.stdin.write(JSON.stringify(data));
  pyProcess.stdin.end();

  // 监听 Python 标准输出,解析处理结果
  pyProcess.stdout.on('data', (output) => {
    try {
      const result = JSON.parse(output.toString().trim());
      console.log('Python 处理完成,结果:', result);
      // 此处添加后续业务逻辑
    } catch (err) {
      console.error('解析 Python 输出失败:', err);
    }
  });

  // 捕获 Python 脚本执行错误
  pyProcess.stderr.on('data', (err) => {
    console.error('Python 脚本执行出错:', err.toString());
  });

  // 监听子进程退出状态
  pyProcess.on('close', (code) => {
    console.log(`Python 子进程退出,退出码: ${code}`);
  });
}

// 启动执行
start();

Python 端

需将处理后的结果转为可 JSON 序列化的格式输出,确保输出内容纯净无多余调试信息,避免干扰 Node.js 解析:

import sys
import json
import numpy as np

def read_in():
    # 读取标准输入的所有内容并解析为 JSON
    input_content = sys.stdin.read()
    return json.loads(input_content)

def main():
    raw_data = read_in()
    # 示例处理逻辑:用 numpy 将数组元素翻倍
    processed_array = np.array(raw_data) * 2
    # 将 numpy 数组转为普通列表,确保可 JSON 序列化
    result = processed_array.tolist()
    # 输出序列化后的结果
    print(json.dumps(result))

if __name__ == '__main__':
    main()

核心注意事项

  • 数据序列化一致性:两端统一使用 JSON 格式传递数据,避免因格式不匹配导致解析失败。
  • 子进程复用问题:若需多次调用脚本,每次创建新子进程,避免复用已关闭 stdin 的进程。
  • 输出纯净性:Python 脚本中不要添加多余的print调试语句,否则会破坏结果的 JSON 结构。
  • 错误监听:务必监听stderr和子进程close事件,快速排查脚本执行异常。

内容的提问来源于stack exchange,提问作者Alex Dalen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:07:47