输出在nodejs中的subprocess中断

我在ubantu上连接了波分GSM调制解调器 。 我使用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上发出一些命令时,我得不到正确的输出。

例如

假设我的输出应该是

 Data : abcd1234 

而是我得到了

 Data : abc Data : d1234 

总之,我的输出被打破了。 我不能从我的输出完全破坏的地方推断出来。 这是随机的。 任何人都可以给我任何想法?

提前致谢。

如果不知道你用调制解调器说什么协议,很难说,但是如果它是例如\n分隔,你将不得不缓冲数据并分割\n

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

作为node.js中的所有stream,数据的读取由2个独立的事件组成: 数据结束

当一些数据在数据stream中可读时触发数据事件(在你的情况下,两次)。

当没有更多的数据事件被触发时, 结束事件被触发。

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