2013-11-28 75 views
12

我產卵節點的過程和跟蹤命令的這樣的輸出:產卵的NodeJS標準輸出字符串格式

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

它運作良好,但輸出似乎分割線:

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

以上僅是npm install響應的一條線。通常,這全部在一行中,它也在響應之前和之後添加換行符。有沒有辦法讓數據輸出看起來像標準運行,即逐行?

回答

15

數據流被緩存,並在需要時發出data事件(可以這麼說),而不是像文本行那樣嚴格的邊界。

但是你可以使用readline模塊來解析緩衝區進入行你:

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

有3個解決方案,浮現在腦海:

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