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

如何使用python-shell实现Node与常驻Python的stdin/stdout双向通信

实现步骤

1. 安装依赖

在Node项目目录下执行安装命令:

npm install python-shell

2. 编写Node侧代码(app.js)

const { PythonShell } = require('python-shell');

// 初始化Python常驻进程
let pyshell = new PythonShell('test.py', {
  pythonPath: 'python3' // Windows环境可修改为'python'
});

// 监听Python返回的消息,自动解析JSON格式返回内容
pyshell.on('message', (message) => {
  console.log('收到Python返回数据:', message);
});

// 监听进程报错
pyshell.on('error', (err) => {
  console.error('Python进程异常:', err);
});

// 监听进程退出
pyshell.on('close', (code) => {
  console.log('Python进程退出,退出码:', code);
});

// 向Python发送测试字符串
const sendStr = "12345:2 analogInput 2";
console.log('向Python发送数据:', sendStr);
pyshell.send(sendStr);

// 支持多次发送消息,示例为间隔2秒发送第二条测试数据
setTimeout(() => {
  pyshell.send("第二条测试数据");
}, 2000);

// 如需手动关闭Python进程可调用以下方法
// pyshell.end((err) => {
//   if (err) throw err;
//   console.log('Python进程已手动关闭');
// });

3. 编写Python侧代码(test.py)

import sys
import json

def process_input(input_str):
    # 可替换为自定义业务处理逻辑
    parts = input_str.strip().split()
    resp = {
        "Response": "Success",
        "OriginalInput": input_str,
        "ParsedData": {
            "address": parts[0] if len(parts) > 0 else "",
            "object_type": parts[1] if len(parts) > 1 else "",
            "object_instance": parts[2] if len(parts) > 2 else ""
        }
    }
    return resp

if __name__ == "__main__":
    # 循环监听stdin输入,保持进程常驻
    for line in sys.stdin:
        input_str = line.strip()
        result = process_input(input_str)
        # 输出JSON格式结果,每行对应一次返回
        print(json.dumps(result))
        # 强制刷新缓冲区,避免数据滞留不发送
        sys.stdout.flush()

运行测试

在项目目录执行node app,控制台会依次打印发送的内容和Python返回的处理结果。

注意事项

  • 每次pyshell.send()发送的内容不要携带换行符,避免Python侧拆包错误
  • 如需传输结构化数据,可在Node侧将对象转成JSON字符串发送,Python侧收到后直接解析即可
  • 大流量传输场景建议给每次传输内容添加自定义结束标记,避免粘包问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:03