NodeJS生成stdout字符串格式

时间:2013-11-28 16:34:25

标签: node.js stdout spawn

我在节点中生成一个进程并跟踪命令的输出,如下所示:

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

效果很好但是,输出似乎是分割线:

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

以上只是npm install的回复中的一行。通常这只是一行,它还在响应之前和之后添加换行符。有没有办法让数据输出看起来像标准运行,即逐行?

2 个答案:

答案 0 :(得分:19)

Streams被缓冲并随时发出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);
});

答案 1 :(得分:6)

有三种解决方案可供考虑:

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