2013-11-28 15 views
12

を生む:NodeJSは私がノードでプロセスを生成し、このようなコマンドの出力を追跡しています標準出力文字列フォーマット

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

それがうまく機能、しかし、出力が行を分割しているようだ。

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

上記は、npm installの応答のうち1行だけです。通常、これはすべて1行に表示され、応答の前後に改行が追加されます。データ出力を標準実行(line-by-line)のように見せる方法はありますか?

答えて

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); 
}); 
は、
関連する問題