每次都生成连续的 bash 命令并等待完成的流

问题描述

我想生成一个 bash 命令 (top -b),它应该在后台连续运行并不断提供结果。我想通过 websocket 将整个输出发送到我的前端,每次提供完整的输出。不幸的是,top一个输出太长并且被拆分为多条消息。

是否有一种干净的方法来等待合并消息并返回整个输出?我怎么知道输出是完整的?

到目前为止,我唯一的解决方案是让命令完成并收集所有返回并将其返回。但是这样我每次都必须再次生成我的命令,我想避免这种情况。

import { spawn } from 'child_process'

// Spawn command
const command = 'top'
const args = ['-b']
const child = spawn(command,args)

// Data output
child.stdout.setEncoding('utf8')
child.stdout.on('data',(data) => {
    const convertedData = data.toString()
    console.log(convertedData)
    // Here I want to "collect" my data and wait until "one complete output" is delivered
    // doSomethingWithCompleteOutput()
})

解决方法

我有一个可行的解决方案,但是脚本在 no 开始新的输出/间隔之前无法识别完成的输出。

我继续寻找更好的解决方案,以便我可以直接看到输出何时尽快完成。

top