我如何从 child_process.execFile 直播中获得结果?
How I get result from child_process.execFile live?
我想通过 运行ning Node.js 从基于 C 的二进制文件实时获取数据。我知道 Node.js 可以 运行 使用 child_process 模块的可执行二进制文件。
所以我创建了简单的 C/Node.js 应用程序,如下所示:
// It will be compiled to a.out and run by below Node.js code
#include <stdio.h>
int main() {
int i=0;
for (i=0; i<10; i++) {
printf("%d\n", i);
sleep(1);
}
}
var spawn = require('child_process').spawn;
var cmd = spawn('./a.out');
cmd.stdout.on('data', function(data) {
console.log('stdout : ' + data);
});
cmd.stderr.on('data', function(data) {
console.log('stderr : ' + data);
});
cmd.stdout.on('end', function(data) {
console.log('end');
});
我的预期是:
00:00] 0
00:01] 1
00:02] 2
...
00:09] 9
00:10] 10
但我看到了:
00:10] 0
1
2
...
9
10
看起来二进制文件中的所有stdout都会存储到缓冲区中,二进制文件终止后,将显示所有缓冲区数据。
我预计 cmd.stdout.on('data', callback) 会 运行 10 次,但它 运行 只是 1 次。
但我想得到像流一样的结果。
如何获取流式数据,或者实时按行获取数据?
By default, stdout in general is buffered until a newline is written. However, if stdout is not a tty (which is the case here with child_process.spawn()
), all output is buffered, regardless of newlines. You can disable stdout buffering entirely by doing setbuf(stdout, NULL)
.
我尝试了以下方法,它有效。
#include <stdio.h>
int main() {
setbuf(stdout, NULL);
int i=0;
for (i=0; i<10; i++) {
printf("%d\n", i);
sleep(1);
}
}
参考: and
我想通过 运行ning Node.js 从基于 C 的二进制文件实时获取数据。我知道 Node.js 可以 运行 使用 child_process 模块的可执行二进制文件。
所以我创建了简单的 C/Node.js 应用程序,如下所示:
// It will be compiled to a.out and run by below Node.js code
#include <stdio.h>
int main() {
int i=0;
for (i=0; i<10; i++) {
printf("%d\n", i);
sleep(1);
}
}
var spawn = require('child_process').spawn;
var cmd = spawn('./a.out');
cmd.stdout.on('data', function(data) {
console.log('stdout : ' + data);
});
cmd.stderr.on('data', function(data) {
console.log('stderr : ' + data);
});
cmd.stdout.on('end', function(data) {
console.log('end');
});
我的预期是:
00:00] 0
00:01] 1
00:02] 2
...
00:09] 9
00:10] 10
但我看到了:
00:10] 0
1
2
...
9
10
看起来二进制文件中的所有stdout都会存储到缓冲区中,二进制文件终止后,将显示所有缓冲区数据。 我预计 cmd.stdout.on('data', callback) 会 运行 10 次,但它 运行 只是 1 次。
但我想得到像流一样的结果。 如何获取流式数据,或者实时按行获取数据?
By default, stdout in general is buffered until a newline is written. However, if stdout is not a tty (which is the case here with
child_process.spawn()
), all output is buffered, regardless of newlines. You can disable stdout buffering entirely by doingsetbuf(stdout, NULL)
.
我尝试了以下方法,它有效。
#include <stdio.h>
int main() {
setbuf(stdout, NULL);
int i=0;
for (i=0; i<10; i++) {
printf("%d\n", i);
sleep(1);
}
}
参考: