Как читать из child_process построчно в Node.js?

Я пытаюсь создать скрипт Node.js для анализа использования диска. Для этого я раскошелился на du, но у меня возникли проблемы с тем, чтобы понять, как читать вывод дочернего процесса построчно. Вот что я пробовал до сих пор:

var spawn = require("child_process").spawn,
    rl = require('readline'),
    du = spawn('du', ['/home']);
    linereader = rl.createInterface(du.stdout, du.stdin);

// Read line by line.
//du.stdout.on('data', function (data) {
linereader.on('line', function (data) {
  console.log(data);
});

du.stdout.on('data' просто читает фрагменты данных, и хотя readline должен предположительно разбивать ввод по строкам, это не так, вместо этого я получаю точно такие же данные (du.stdout возвращает буфер, но вызов .toString() на нем дает мне те же данные, которые я получил с linereader).


person mikl    schedule 19.04.2012    source источник


Ответы (1)


Readline не работает в текущей стабильной версии (0.6.14) Node.js. У нас была такая же проблема здесь:

https://stackoverflow.com/a/10012306/362536

Тем не менее, есть очень быстрый фрагмент кода от TooTallNate, который решает эту проблему для вас: https://gist.github.com/1785026

Есть запрос на включение, чтобы исправить это в более поздних версиях, и это должно быть в выпуске 0.7.8.

person Brad    schedule 19.04.2012