问题描述
我有一个NodeJS子进程,该子进程在调用时会计算一个唯一的pid(供redis使用)
我和控制台将其记录下来(例如:console.log('PID: ' + pid)
)
在父母中,我叫spawn(command,arg,{stdio: ['pipe','pipe','pipe'],detached: true})
我尝试过的一些事情:
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()监听流(即不间断运行)。
解决方法
编辑:能够弄清楚这一点 该代码在很大程度上可以正常工作,这是必需的:
- 克隆子进程stdout(我们要从中读取数据)
- 读取字符串(使用utf-8编码转换为字符串)
- 当输出与正则表达式字符串匹配时,您可以使用字符串操纵器来提取值,销毁流并解析。