2013-11-28 20 views
12

Sto creando un processo nel nodo e il monitoraggio l'output del comando in questo modo:NodeJS depongono le uova stdout formato stringa

proc.stdout.on("data", function (data) { 
    console.log(data.toString()); 
}); 

Funziona bene, invece, l'uscita sembra essere dividere le righe:

npm http 
304 https://registry.npmjs.org/underscore 

Quanto sopra è solo una riga della risposta di un npm install. In genere questo è tutto in una riga, aggiunge anche interruzioni di riga prima e dopo la risposta. C'è un modo per ottenere l'output dei dati per assomigliare alla corsa standard, cioè linea per linea?

risposta

15

Gli stream vengono bufferizzati ed emettono eventi data in qualsiasi momento (per così dire), non su confini rigidi come linee di testo.

Ma è possibile utilizzare il modulo readline per analizzare i buffer in linee per voi:

var child_process = require('child_process'); 
var readline  = require('readline'); 
var proc   = child_process.spawn(...); 

readline.createInterface({ 
    input  : proc.stdout, 
    terminal : false 
}).on('line', function(line) { 
    console.log(line); 
}); 
5

Ci sono 3 soluzioni che vengono in mente:

// solution #1 
process.stdout.write(data); 

// solution #2 
console.log(data.toString().replace(/[\n\r]/g, "")); 

// solution #3 
var child_process = require('child_process'); 
var readline = require('readline'); 
var proc = child_process.spawn(...); 
readline.createInterface({ 
    input: proc.stdout, 
    terminal: false 
}).on('line', function(line) { 
    console.log(line); 
});