子进程中的输出中断由nodejs

时间:2012-03-21 09:44:57

标签: node.js child-process

我在ubantu上联系了wavecom GSM modem。我使用node.js语言与GSM调制解调器进行通信。 我通过Child Process向调制解调器发送命令。这里的例子

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

简而言之,我的输出被打破了。 我不能从我的输出完全断开的地方推断出来。这是随机的。 谁能给我任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:2)

很难说不知道你用调制解调器说什么协议,但是如果它是\n分隔后,您必须缓冲数据并拆分为\n

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

答案 1 :(得分:1)

作为node.js中的所有流,数据读取包含2个独立事件:数据结束

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

数据事件。

结束事件在不再触发数据事件时触发。

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