直接在Gitbash中执行控制台输出看起来很好,如下所示:
npm info it worked if it ends with ok
npm info using npm@1.4.14
npm info using node@v0.10.29
npm info trying registry request attempt 1 at 12:38:21
npm http GET http://registry.npmjs.org/phonegap
npm http 304 http://registry.npmjs.org/phonegap
npm info installOne phonegap@3.5.0-0.20.4
...
...
但是,如果我在nodejs中以编程方式执行相同的操作,请执行以下代码片段:
var exec = require('child_process').exec;
var process = exec('npm install -g phonegap', function(err, stdout, stderr){
});
process.stdout.on('data', function(data) {
console.info(data);
});
process.stderr.on('data', function(data) {
console.error(data);
});
控制台输出看起来像这样一团糟:
npm
info
it worked if it ends with
ok
npm info using npm@1.4.14
npm info using
node@v0.10.29
npm
info
trying
registry request attempt 1 at 12:44:09
npm http GET http://registry.npmjs.org/phonegap
npm
http
304 http://registry.npmjs.org/phonegap
...
...
有什么方法可以解决这个问题吗?感谢
答案 0 :(得分:2)
console.log
和console.error
在输出数据后附加换行符,并且您为每个data
事件调用它们。这意味着,即使data
事件只是一行的一部分,它也会获得它自己的行。
相反,您应该将数据直接写入stdout
,以便它不会添加随机换行符。我也没有使用名称process
,因为它已经是全球名称。
var exec = require('child_process').exec;
var phonegap = exec('npm install -g phonegap', function(err, stdout, stderr){
});
phonegap.stdout.pipe(process.stdout);
phonegap.stderr.pipe(process.stderr);
答案 1 :(得分:0)
数据事件与完整的文本行不对应。使用process.stdout.write而不是console.info。这样,每次写入都将在同一行继续,直到您明确写入\ n为止。