从 NodeJS v16.4.2 开始,我正在运行一个命令 ( pw-dump -m
) 来输出和监控 Pipewire 的当前状态。
该命令最初将 Pipewire 的整个状态作为长 JSON 字符串输出到标准输出,然后每当状态更改时,它都会输出一个 JSON 编码的数组,其中包含所有更改的对象。
该命令在输出后不会退出,因此必须生成它,并在运行时从 NodeJS 读取。
每当将新数据发送到命令的标准输出时,我都想读取新数据,并更新我的 NodeJS 程序的 Pipewire 状态缓存。
该命令在终端中正常工作。
这是我在 NodeJS 中使用的代码:
const { spawn } = require('child_process');
var testExec = spawn('pw-dump',['-m']);
testExec.stdout.on('data',function(chunk){
var str = chunk.toString();
// do anything here
console.log(str);
});
使用此代码,我以不同大小的块获取数据,但这些块中的一个或多个似乎被截断,包括最后一个。没有一个块类似于命令输出的结尾。
此外,每当命令发送它们时,NodeJS 都不会接收到新的数据块——它是否触发标准输出对象的“数据”事件似乎是随机的。
我认为这是某处的某种缓冲区大小问题,或者 NodeJS 在输出数据之前一直在等待它具有一定长度的数据,尽管在任何一种情况下我都不知道该尝试什么。
提前致谢。