【问题标题】:How to capture a colored spawned process output and send to the browser via nodejs?如何捕获彩色生成的进程输出并通过nodejs发送到浏览器?
【发布时间】:2019-03-05 22:47:06
【问题描述】:

我知道这个问题有很多变体,但似乎没有一个涵盖这个特定问题。

我正在生成一个子进程并尝试将输出发送到浏览器。问题是 ansi 着色没有进入输出。

我已导入 ansi-to-html 以在收到 ansi 输出时呈现它,但我生成的孩子没有保留输出。

  const process = spawn(
    'bash',
   [
      '-ic',
      '<command I am running>'
   ],
    );

  process.stdout.on('data', (data) => {
    console.log(`stdout: ${data}`);
    self.terminalOutput += convert.toHtml(`${data}`);

  });

  process.stderr.on('data', (data) => {
    console.log(`stderr: ${data}`);
    self.terminalOutput += convert.toHtml(`${data}`);
  });

  process.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
    self.terminalOutput += convert.toHtml(`child process exited with code ${code}`)
  });

【问题讨论】:

  • 如果不在 tty(或 pty)上运行,大多数工具拒绝输出颜色代码,请验证输出是否包含颜色代码。如果没有,请尝试使用 pty 或检查是否可以强制命令输出颜色代码,即使不在 tty 上。

标签: node.js linux ansi spawn


【解决方案1】:

看来我在这里找到了答案。 `${data}` 正在隐式转换从衍生进程返回的数据(我相信通过隐式调用 toString() 进行类型转换,但我在这里可能是错的)。

所以要正确地将数据传递给 ansi-to-html,你必须直接传递它

  process.stdout.on('data', (data) => {
    self.terminalOutput += convert.toHtml(data);
  });

  process.stderr.on('data', (data) => {
    self.terminalOutput += convert.toHtml(data);
  });

【讨论】:

    【解决方案2】:

    对我来说,设置environment variable FORCE_COLOR=1 会导致包含 ansi 格式字符串的数据。

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2020-03-24
      • 2014-06-30
      • 2012-08-30
      • 1970-01-01
      • 2011-12-14
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多