Формат строки NodeJS spwn stdout
Я создаю процесс в node и отслеживаю вывод команды следующим образом:
proc.stdout.on("data", function (data) {
console.log(data.toString());
});
Это хорошо работает, однако вывод, кажется, разбивает строки:
npm http
304 https://registry.npmjs.org/underscore
Выше всего одна строка из ответа от npm install
. Обычно это все в одной строке, это также добавляет разрывы строк до и после ответа. Есть ли способ получить вывод данных, похожий на стандартный запуск, т.е. По очереди?
Ответы
Ответ 1
Потоки буферизуются и выделяют события data
всякий раз, когда им захочется (так сказать), а не на строгие границы, такие как строки текста.
Но вы можете использовать модуль readline
для разбора буферов в строках для вас:
var child_process = require('child_process');
var readline = require('readline');
var proc = child_process.spawn(...);
readline.createInterface({
input : proc.stdout,
terminal : false
}).on('line', function(line) {
console.log(line);
});
Ответ 2
На ум приходят 3 решения:
// solution #1
process.stdout.write(data);
// solution #2
console.log(data.toString().replace(/[\n\r]/g, ""));
// solution #3
var child_process = require('child_process');
var readline = require('readline');
var proc = child_process.spawn(...);
readline.createInterface({
input: proc.stdout,
terminal: false
}).on('line', function(line) {
console.log(line);
});