【问题标题】:How do I preserve colors in the console when running a script from a spawned child process? [duplicate]从衍生的子进程运行脚本时,如何在控制台中保留颜色? [复制]
【发布时间】:2016-01-02 12:10:27
【问题描述】:

我有一个充满 Selenium 测试的 mocha 文件。当我像往常一样从命令行运行 mocha 时,由于colors 模块,我得到了这个漂亮的格式化和彩色输出。

这看起来很棒并且运行良好,但是手动运行只能针对单个环境运行测试。为了在多个环境中并行运行测试,Sauce Labs(Selenium 云托管)建议生成 mocha 子进程。我将它构建到我们项目中的 Gulp 任务中。

gulp.task('test', function () {
  var targets = [
    'windows.chrome',
    'windows.firefox',
    'windows.ie',
    'mac.chrome',
    'mac.firefox',
    'mac.safari',
    'linux.chrome',
    'linux.firefox'
  ];

  function run_mocha(target, done) {
    var env = Object.assign({}, process.env);
    env.TARGET = target;

    var mocha = exec('mocha ./test/test-runner.js', {env: env}, done);
    ['stdout', 'stderr'].forEach((stream) =>
      mocha[stream].on('data', (data) => process[stream].write(`${target}:${data}`))
    );
  }

  var jobs = targets.map(
    (target) => new Promise(
      (resolve, reject) => run_mocha(target, resolve)
    )
  );

  return Promise.all(jobs).then(() => {
    console.log('ALL SUCCESSFUL');
  });
});

这很好用,但输出完全失去了着色。它还注入了多余的换行符,但我能够通过将 console.logconsole.error 换成 process.stdout.writeprocess.stderr.write 来解决这个问题。

您可以看到从 gulp 打印的行被着色并且工作正常,但是当它生成子进程时,从那里打印的任何行都会失去颜色。这不是世界末日,但现在我很好奇发生了什么以及如何解决它。我已经了解了一些关于 ANSI 转义码的知识,但我仍然对发生的事情感到非常困惑。有什么建议吗?

【问题讨论】:

  • 您是否尝试过这里提到的任何答案? stackoverflow.com/questions/9135579/node-js-spawn-with-colors
  • 根据那个问题,我确实弄乱了spawnstdio 属性。我能够将inherit 提供给stdio,这迫使子进程采用与父进程相同的输出流,这也启用了颜色。我遇到的问题是,当测试并行运行时,我想在每一行前面加上目标环境,以便我知道哪些行进入哪些测试运行。据我所知,父母没有办法做到这一点。我更喜欢管道子流,以便我可以在父流中转换它们。下面丹的回答解决了颜色问题:)

标签: javascript node.js stream mocha.js child-process


【解决方案1】:

所以我发现了这个问题: Node.js spawn with colors?

看起来这是 Mocha 的一个问题,它检测到它的输出不会是标准输出。您需要专门启用颜色:

exec('mocha ./test/test-runner.js --colors')

【讨论】:

  • 谢谢。这修复了 mocha 自己的输出以正确包含子进程中的颜色。这也让我走上了正确的轨道,发现colors 模块也有一个明确启用颜色的标志,除了它是单数而不是复数:--color。将这两个标志添加到生成的 mocha 进程中会启用 mocha 和 Selenium Web 驱动程序中的所有颜色。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2013-06-09
  • 2019-08-16
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多