【问题标题】:sending serial data from python script to node script将串行数据从 python 脚本发送到节点脚本
【发布时间】:2013-06-01 13:13:54
【问题描述】:

我有两个脚本——一个是 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 脚本的唯一原因是由于串行端口模块中的一些问题,node.js 串行端口模块目前不适用于我的项目。

【问题讨论】:

  • 串行数据的本质是什么?很多?一点?文本?二进制?

标签: node.js


【解决方案1】:

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

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);
});

【讨论】:

  • @nfreeze 无论如何都可以在不使用标准输出的情况下使用这个程序
【解决方案2】:

使用-u python 命令行开关。它会告诉 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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多