2012-04-19 46 views
6

Estoy tratando de hacer una secuencia de comandos Node.js para analizar el uso del disco. Para esto, desalojo al du, pero estoy teniendo problemas para descifrar cómo leer el resultado del proceso hijo línea por línea. Esto es lo que he probado hasta ahora:¿Cómo leer desde un child_process línea por línea en Node.js?

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' simplemente lee fragmentos de datos, y mientras readline debe supuestamente dividir su entrada por línea, no lo hace, en cambio consigo los mismos datos (du.stdout devuelve un búfer, pero llamando al .toString() me da los mismos datos que obtuve con linereader).

Respuesta

2

Readline está roto en la versión estable actual (0.6.14) de Node.js. Tuvimos el mismo problema aquí:

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

Sin embargo, hay un verdadero fragmento rápida de código desde TooTallNate que soluciona este problema para usted: https://gist.github.com/1785026

Hay una solicitud de extracción de solucionar este problema en adelante versiones, y debería estar en la versión 0.7.8.

+0

Ah, ya veo. Un poco triste :) – mikl

Cuestiones relacionadas