2013-11-28 26 views
12

mam tarła proces w węźle i śledzenia wyjście polecenia takiego:NodeJS tarło stdout format string

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

To działa dobrze, jednak wyjście wydaje się być podział linie:

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

Powyższe informacje to tylko jedna linia odpowiedzi z npm install. Zazwyczaj jest to wszystko w jednym wierszu, a także dodawanie podziałów linii przed i po odpowiedzi. Czy istnieje sposób, aby dane wyjściowe wyglądały jak standardowe uruchomienie, np. Linia po linii?

Odpowiedz

15

Strumienie są buforowane i emitują zdarzenia data, kiedy tylko zechcą (nie mówiąc o tym), a nie na ścisłych granicach, takich jak linie tekstu.

Ale można użyć modułu readline do analizowania bufory na linie dla Ciebie:

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

Są 3 rozwiązania, które przychodzą na myśl:

// 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); 
});