首页 > 解决方案 > NodeJS 读取部分流

问题描述

我有一个 NodeJS 子进程,它在调用时计算一个唯一的 pid(由 redis 使用)

我和控制台记录它(例如console.log('PID: ' + pid):)

在我打电话的父母中spawn(command, arg, {stdio: ['pipe', 'pipe', 'pipe'], detached: true})

我尝试过的一些事情:

  1. 关闭子进程标准输出并将其传递给一个函数(返回一个承诺),然后
return new Promise((resolve, reject) => {
    inputStream.on('data', (i) => {
      const isPidString = RegExp('/^PID:.+/g').test(i.toString('utf8'))
      console.log('isPidString', isPidString)
      if (isPidString) {
        console.log('found string')
        console.log('i', i.toString())
        const pidValue = parseInt(i.toString('utf8').split(': ')[1])
        console.log('pidVal', pidValue)
        inputStream.destroy()
        resolve(pidValue)
      }
    })
    
    setTimeout(() => {
      reject()
    }, 5000);
  });

不知何故,它不起作用。我的问题是:我如何只为我关心的一个特定的 console.log() 收听一个流(那将不间断地运行)。

标签: node.jschild-processnode-streams

解决方案


编辑:能够弄清楚这一点代码很大程度上可以工作,这是所需的:

  1. 克隆子进程标准输出(我们要从中读取数据)
  2. 读取字符串(使用 utf-8 编码转换为字符串)
  3. 当输出与正则表达式字符串匹配时,您使用字符串操纵器来提取值、销毁流并解析。

推荐阅读