从python脚本发送串行数据到节点脚本

我有两个脚本 – 一个python脚本和另一个节点脚本。 python脚本在一个无限循环中运行并读取串行数据。 一旦接收到串行数据,就必须将其传递给node.js scipt,以便在节点服务器中进行处理。

我想使用node.js child_process模块​​从python脚本读取数据,但由于python脚本是一个无限循环,它不会返回任何数据到节点脚本。 任何人都可以让我知道如何解决这个问题?

Python脚本:

import serial ser = serial.Serial('COM10', 9600, timeout =1) while 1 : print ser.readline()' 

Node.js脚本:

 var spawn = require('child_process').spawn, ls = spawn('python',['pyserial.py']); ls.stdout.on('data', function (data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); }); 

注意:使用python脚本的唯一原因是由于serialport模块中的某个问题,node.js serialport模块目前不适用于我的项目。

打印后,您需要在Python脚本中刷新标准输出stream。 这是一个打印时间的例子(我没有串口设备来testing):

python:

 import sys from datetime import datetime from time import sleep while 1: print datetime.now() sys.stdout.flush() sleep(5) 

Node.js的:

 var spawn = require('child_process').spawn, ls = spawn('python',['test.py']); ls.stdout.on('data', function (data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); }); 

使用-u python命令行开关。 它会告诉python使用无缓冲的stream。

 var spawn = require('child_process').spawn, ls = spawn('python',['-u', 'pyserial.py']); ls.stdout.on('data', function (data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); });