Я использую node.js и считываю ввод из последовательного порта, открывая файл/dev/tty, я отправляю команду и читаю результат команды, и я хочу закрыть поток после того, как прочитал и проанализировал все данные. Я знаю, что я закончил считывание данных маркером данных и их окончанием. Я нахожу, что как только я закрыл поток, моя программа не закончится.Как закрыть поток, который не имеет больше данных для отправки в node.js?
Ниже приведен пример того, что я вижу, но использует/dev/random для медленного генерации данных (если ваша система не делает много). То, что я нахожу, это то, что процесс завершится, как только устройство генерирует данные после поток был закрыт.
var util = require('util'),
PassThrough = require('stream').PassThrough,
fs = require('fs');
// If the system is not doing enough to fill the entropy pool
// /dev/random will not return much data. Feed the entropy pool with :
// ssh <host> 'cat /dev/urandom' > /dev/urandom
var readStream = fs.createReadStream('/dev/random');
var pt = new PassThrough();
pt.on('data', function (data) {
console.log(data)
console.log('closing');
readStream.close(); //expect the process to terminate immediately
});
readStream.pipe(pt);
Update: 1
Я вернулся на этот вопрос и есть еще один образец, это один раз использует и PTY легко воспроизводится в РЕПЛ узле. Войдите в систему на 2 терминалах и используйте pty терминала, в котором вы не используете узел, в следующем вызове createReadStream.
var fs = require('fs');
var rs = fs.createReadStream('/dev/pts/1'); // a pty that is allocated in another terminal by my user
//wait just a second, don't copy and paste everything at once
process.exit(0);
В этот момент узел будет просто висеть и не выходить. Это на 10.28.
Возможно, это поможет? http://stackoverflow.com/questions/16399476/readstream-pipe-does-not-close –
Я предполагаю, что это не помогло? В случае, если вы это пропустили, ОП этого вопроса поставил свое решение в нижней части вопроса (для меня, по крайней мере, сначала не было очевидным, что это было не просто больше вопросов внизу). –
Это странное поведение. Код OP немедленно выходит в Mac OS (узел v0.10.21) ... –