【问题标题】:Node child process spawn output is different than from terminal节点子进程生成输出与终端不同
【发布时间】:2017-09-27 20:08:17
【问题描述】:

当我运行下面的代码时,控制台的输出与我看到的是否直接通过终端运行此命令不同。知道为什么吗?除了stdout.on('data'),还有其他功能可以输出更多信息吗?

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

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

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

【问题讨论】:

  • stderr 流是否有可能受到流量控制而导致阻塞?也许也添加一个sh.stderr.on('data', ...) 处理程序。
  • 另外,以你的方式运行它和在命令行上运行它的主要区别在于,当你运行命令行时,你是在一个 shell 中运行,但是当你以你的方式运行它时,你不是。这可能会导致一些不同的行为。如果你愿意,你可以告诉 spawn 在 shell 中运行它。
  • 你弄清楚为什么输出不同了吗?

标签: javascript node.js stdout child-process


【解决方案1】:

有几个不同之处。

可能是您在stderr (sh.stderr.on('data', ...)) 上遗漏了一些东西。

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

这些进度条的工作原理是它们使用process.stdout.write()process.stdout.cursorTo()process.stdout.clearLine() 的组合,这实际上让它们可以擦除和重写一行。通过console.logdata 将其输出将非常不同。

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多