NodeJS生成stdout字符串格式

Flu*_*yte 15 stdout spawn node.js

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

proc.stdout.on("data", function (data) {
    console.log(data.toString());
});
Run Code Online (Sandbox Code Playgroud)

它运作良好,但输出似乎是分裂线:

npm http
 304 https://registry.npmjs.org/underscore
Run Code Online (Sandbox Code Playgroud)

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

rob*_*lep 20

流可以缓冲并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);
});
Run Code Online (Sandbox Code Playgroud)


tfm*_*gue 7

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

// 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);
});
Run Code Online (Sandbox Code Playgroud)