(对于TL; DR /简短问题 - 见下文)
我在C中编写了一个小程序,根据我的麦克风输入(avarage听到的声音频率)吐出一堆数字 - 我想用这些数字做些事情(识别哨子模式等)。现在该程序运行正常 - 它每秒吐出大约30个数字,以换行符结束。
现在我在nodejs程序中需要这些信息,我实际上需要实时解析(或尽快)。
我尝试过使用exec和spawn,都使用.pipe并只是挂钩进入.stdout事件。
问题是那些似乎是缓冲的。代码:
whistleListen = spawn('./dist/sndpeek', ['--nodisplay','--print','--rolloff-only']);
whistleListen.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
效果是程序启动,然后需要几秒钟,然后立即获得大约200行。看起来输出正在被缓冲。
我不希望这样 - 最好的事情就是实时接收,只需继续阅读,直到我点击\ n,然后解析数字,并用它做点什么。
有没有办法实现这个目标?
TL; DR
NodeJS生成一个程序(尝试过exec和spawn),然后我挂钩到程序的stdout。该程序用数字(每秒大约40行)吐出很多行。我需要实时解析这些数据,但是当我使用回调句柄时,我每隔几秒就会收到大约200行的转储。我需要加快速度。
提前致谢!
答案 0 :(得分:1)
setbuf(stdout, NULL);
现在是fprintf();不再缓冲,我在我的节点应用程序中为每个.stdout事件获得一个新行。