NodeJS读取部分流

问题描述

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

我和控制台将其记录下来(例如:console.log('PID: ' + pid)

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

我尝试过的一些事情:

  1. 关闭子进程stdout并将其传递给一个函数(该函数返回一个Promise),然后
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()监听流(即不间断运行)。

解决方法

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

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