How to read from a child_process line by line in Node.js?
Asked Answered
V

1

8

I am trying to make a Node.js script to analyse disk usage. For this, I shell out to du, but I am having trouble figuring out how to read the output from the child process line by line. Here's what I've tried so far:

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' just reads chunks of data, and while readline should supposedly split its input by line, it doesn't, instead I get the exact same data (du.stdout returns a buffer, but calling .toString() on it gives me the same data I got with linereader).

Vogler answered 19/4, 2012 at 14:3 Comment(0)
F
3

Readline is broken in the current stable version (0.6.14) of Node.js. We had the same problem here:

https://mcmap.net/q/675092/-node-js-readline-not-waiting-for-a-full-line-on-socket-connections

However, there is a real quick snippet of code from TooTallNate that fixes this problem for you: https://gist.github.com/1785026

There is a pull request to fix this in later versions, and it should be in the 0.7.8 release.

Funk answered 19/4, 2012 at 14:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.