(TL;DR/简短问题 - 请参阅下文)
我用 C 语言编写了一个小程序,它根据我的麦克风输入(平均听到的声音频率)吐出一堆数字 - 我想用这些数字做一些事情(识别口哨模式等)。现在程序工作正常 - 它每秒输出大约 30 个以换行符结尾的数字。
现在我在我的nodejs程序中需要这些信息,并且我实际上需要实时(或尽可能快)解析它。
我尝试过使用 exec 和 spawn,两者都与 .pipe 一起使用,并且只是 Hook 到 .stdout 事件。
问题是那些似乎被缓冲了。代码:
whistleListen = spawn('./dist/sndpeek', ['--nodisplay','--print','--rolloff-only']);
whistleListen.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
效果是程序启动,然后需要几秒钟,然后立即我得到大约 200 行。看起来输出正在被缓冲。
我不希望这样 - 最好的办法是实时接收它,继续阅读直到我点击\n,然后解析该数字,并用它做一些事情。
有什么办法可以实现这一点吗?
TL;博士
NodeJS 生成一个程序(尝试了 exec 和 spawn),然后我挂接到该程序的标准输出。该程序吐出许多带有数字的行(每秒大约 40 行)。我需要实时解析这些数据,但是当我使用回调句柄时,每隔几秒我就会得到 1 个大约 200 行的转储。我需要加快速度。
提前致谢!
最佳答案
找到了!原来这不是 NodeJS,而是我的 C 程序。我添加了这一行
setbuf(stdout, NULL);
现在是 fprintf();不再缓冲,我的 Node 应用程序中的每个 .stdout 事件都会得到一个新行。
关于node.js - NodeJS 从其他进度获取 "live"输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770295/