Прерывание вывода в дочернем процессе по nodejs - PullRequest
1 голос
/ 21 марта 2012

я подключил 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, я не получаю вывод правильно.

Например

Предположим, мой вывод должен быть

Data : abcd1234

но вместо него я получил

Data : abc
Data : d1234

Короче, мой вывод нарушен.Я не могу экстраполировать, откуда мой вывод точно сломается.Это случайно.Кто-нибудь может дать мне какую-нибудь идею?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Трудно сказать, не зная, по какому протоколу вы разговариваете с модемом, но если это, например, \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 голос
/ 21 марта 2012

Как и все потоки в node.js, чтение данных состоит из 2 отдельных событий: data и end .

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