无法从subprocess的标准输出中获取任何内容

我试图做一个非常简单的nodejs服务器,接收post请求,并将它们提供给一个简单的C程序,通过stdin和stdout使其所有的I / O。 我正在尝试使用以下脚本作为testing:

var prc = require('child_process').spawn('./example'); // )none of these made it work) prc.stdout.setEncoding('ascii'); //prc.stdout.setEncoding('utf8'); prc.stdout.on('data', function (data) { console.log("child said something: " + data); }); prc.stderr.on('data', function (data) { console.log("stderr: " + data.toString()); }); prc.on('close', function (code) { console.log('process exit code ' + code); }); setInterval(function() { console.log("gonna write"); prc.stdin.write("prueba inicial\n"); console.log("wrote"); }, 2000); 

example.c包含:

 int main() { int i; size_t size; char *line = NULL; for (i=0;;++i) { printf("\ngive me data: "); if (getline(&line, &size, stdin) != -1) { if (strcmp(line, "end\n") == 0) { break; } printf("result: %d, %d\n", i, i*2); } } return 0; } 

但我在屏幕上唯一得到的是

 gonna write wrote gonna write wrote gonna write wrote 

我知道example正在运行,但为什么我没有得到任何低谷prc.stdout

PD:可能是使用套接字或其他方式与example进行通信会更好,但这仅仅是一个真正项目的testing,在这个项目中,我将使用另一个不能更改的C程序。

需要fflush(stdout)理由是,因为stdio检测到你没有在terminal运行,所以默认情况下不会在'\n'上刷新,以提高数据吞吐量。

所以你可以明确地刷新,或者简单地用C代码改变缓冲模式

 setvbuf(stdout, NULL, _IOLBF, 0); 

阅读此手册页以了解更多信息。

显然是什么修复它是每个printf后冲洗stdout

 printf("result: %d, %d\n", i, i*2); fflush(stdout); 

我看到nodejs脚本在example.c被closures时(通过发送end\n )获得了所有的输出。