nodejs在子进程中中断输出



我在ubantu上连接了wavecom GSM调制解调器。我使用node.js语言与GSM调制解调器进行通信。我通过子进程向调制解调器发送命令。此处为示例

var spawn         = require("child_process").spawn,
    exec          = require('child_process').exec;
 // Write dev_ttyUSB15.tmp file
 var child = exec('cat < /dev/ttyUSB15 > /tmp/dev_ttyUSB15.tmp');
 // Read dev_ttyUSB15.tmp file
 var m1 = spawn('tail',['-f','/tmp/dev_ttyUSB15.tmp']);
 // on data event is emitted when dev_ttyUSB15.tmp file has some data 
 m1.stdout.on('data', function (data) {
     console.log("Data : "+data); // this is executed as output
 });

现在,当我在端口/dev/ttyUSB15上启动一些命令时,我无法正确获得输出。

E.g

假设我的输出应该是

Data : abcd1234

但我得到的不是

Data : abc
Data : d1234

简而言之,我的输出被破坏了。我无法从我的输出到底在哪里中断来推断。这是随机的。有人能告诉我什么吗?

提前谢谢。

作为node.js中的所有流,数据读取由两个独立的事件组成:dataend

当流中的某些数据可读时(在您的情况下,两次),就会触发data事件。

end事件在不再触发数据事件时被触发。

var blob = "";
m1.stdout.on('data', function (data) {
 blob += data;
});
m1.stdout.on('end', function () {
 console.log("Data : " + blob); // here you have all the data within one variable
});

如果不知道您与调制解调器使用的是什么协议,很难说,但如果是以n分隔的,则必须缓冲数据并在n:上进行拆分

var buffer = '';
m1.stdout.on('data', function(data) {
    var received = (buffer + data).split('n');
    buffer = received.pop().trim();
    console.log(received.join(''));
});

相关内容

  • 没有找到相关文章

最新更新