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

And*_*ner 5 node.js

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

我想过使用node.js child_process模块​​从python脚本中读取数据,但由于python脚本是一个无限循环,它不会将任何数据返回给节点脚本.谁能告诉我如何解决这个问题?

Python脚本:

import serial
ser = serial.Serial('COM10', 9600, timeout =1)
while 1 :
    print ser.readline()'
Run Code Online (Sandbox Code Playgroud)

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);
});
Run Code Online (Sandbox Code Playgroud)

注意:我使用python脚本的唯一原因是node.js串口模块由于serialport模块中的某些问题而无法正在为我的项目工作.

mr.*_*eze 8

打印后需要在python脚本中刷新标准输出流.这是打印时间的示例(我没有要测试的串行设备):

蟒蛇:

import sys
from datetime import datetime
from time import sleep
while 1:
    print datetime.now()
    sys.stdout.flush()
    sleep(5)
Run Code Online (Sandbox Code Playgroud)

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);
});
Run Code Online (Sandbox Code Playgroud)


Nik*_* M. 6

使用-upython 命令行开关。它将告诉 python 使用无缓冲流。

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);
});
Run Code Online (Sandbox Code Playgroud)