微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NodeJS child_process.spawn() 截断长输出

如何解决NodeJS child_process.spawn() 截断长输出

从 NodeJS v16.4.2 开始,我正在运行一个命令 (pw-dump -m) 来输出和监控 Pipewire 的当前状态。

该命令最初将 Pipewire 的整个状态作为长 JSON 字符串输出到 stdout,然后每当状态发生变化时,它都会输出一个 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 不会在命令发送时接收新的数据块 - 无论是否触发 stdout 对象的“数据”事件似乎都是随机的。

我认为这是某个地方的某种缓冲区大小问题,或者 NodeJS 在输出它之前等待它有一定长度的数据,尽管在任何一种情况下我都不知道该尝试什么。

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。