节点子进程生成输出与终端不同

时间:2017-09-27 20:08:18

标签: javascript node.js stdout child-process

当我运行下面的代码时,我没有得到相同的输出到控制台,因为我看到我是否通过终端直接运行此命令。有什么想法吗?除stdout.on('data')之外还有其他函数可以发出更多信息吗?

具体来说,当我通过终端运行它时,我会得到一个类别的进度条,表示命令完成的百分比。当我通过节点运行它时,它会吐出一些早期类似的信息,然后停止一段时间直到命令完成。

var sh = spawn('sh', ['app/scripts/scriptA.sh', path]);

sh.stdout.on('data', function (data) {
    console.log(data.toString());
});

1 个答案:

答案 0 :(得分:1)

存在一些差异。

可能是您错过了stderrsh.stderr.on('data', ...))上的内容。

另一种可能性,特别是如果它是重写行的类似进度条的东西,那么console.log()将无法做到这一点。

这些进度条的工作原理是它们使用process.stdout.write()process.stdout.cursorTo()以及process.stdout.clearLine()的组合,实际上可以让它们擦除并重写一行。将其从console.log data中提取出来将会产生非常不同的结果。