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
).
Readline is broken in the current stable version (0.6.14) of Node.js. We had the same problem here:
https://stackoverflow.com/a/10012306/362536
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With