node.js - NodeJS 从其他进度获取 "live"输出

标签 node.js

(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/

相关文章:

node.js - 从phonegap中的ajax调用调用node.js文件?

node.js - Socket.io + NodeJS IONIC CORS 问题

node.js - npm 'json-update' 未按预期工作

node.js - 如何使用 Hyperledger Composer API 管理交易

javascript - MySQL SET 仅插入列表中的第一项

node.js - npm install - 错误 This version of node/NAN/v8 requires a C++11 compiler libxmljs@0.18.0 node-gyp rebuild

node.js - 将 npm 配置传递到 npm 脚本条目中

javascript - 如果在对象被卡住后添加新属性,则会抛出错误

node.js - sails.js - 获取空白页

javascript - 如何在模块之间更新此变量的值?