我在节点中生成一个进程并跟踪命令的输出,如下所示:
proc.stdout.on("data", function (data) {
console.log(data.toString());
});
效果很好但是,输出似乎是分割线:
npm http
304 https://registry.npmjs.org/underscore
以上只是npm install
的回复中的一行。通常这只是一行,它还在响应之前和之后添加换行符。有没有办法让数据输出看起来像标准运行,即逐行?
答案 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);
});