2012-04-19 6 views
6

Sto cercando di creare uno script Node.js per analizzare l'utilizzo del disco. A tale scopo, eseguo il shelling su du, ma non riesco a capire come leggere l'output del processo figlio riga per riga. Ecco quello che ho provato finora:Come leggere da un child_process riga per riga in 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' legge solo blocchi di dati, e mentre readline dovrebbe presumibilmente dividere il suo input per riga, non lo fa, invece ho gli stessi dati esatti (du.stdout restituisce un buffer, ma chiamando .toString() su di esso mi dà gli stessi dati che ho ottenuto con linereader).

risposta

2

Readline è rotto nella versione stabile corrente (0.6.14) di Node.js. Abbiamo avuto lo stesso problema qui:

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

Tuttavia, v'è una vera e propria rapida frammento di codice da TooTallNate che risolve questo problema per voi: https://gist.github.com/1785026

C'è una richiesta di pull per risolvere questo problema in seguito versioni, e dovrebbe essere nella versione 0.7.8.

+0

Ah, capisco. Abbastanza triste :) – mikl