派生child_process标准输出到“readline”没有缓冲节点?

当我从命令行运行myProgram时,输出会在生成时实时显示。 当我像这样从节点产生它时,stdout缓冲区一次出现一个大块。

const bat = require('child_process').spawn('myProgram', []); bat.stdout.setEncoding('utf8'); bat.stdout.on('data', console.log); 

我怎么能告诉child_process不缓冲标准输出? 或者设置缓冲区的大小更小?

下一次尝试:

 const spawn = require('child_process').spawn; var options = { stdio: ["ignore", process.stdout, "ignore"] }; const bat = spawn('myProgram', [], options); const rl = require('readline').createInterface({ input: process.stdout }); rl.on('line', function(line) { console.log(line); }); 

这将打印process.stdout到terminal,但即使文档说 process.stdout “…是双工stream…” readline不会获取数据process.stdout

也许让spawn创build一个新的标准输出stream,并将其传递到readline是最简单的:

 const bat = spawn('myProgram'); const rl = require('readline').createInterface({ input: bat.stdout }); 

编辑 :好吧,问题不是这么多节点,但C / C ++标准输出缓冲。 如果你通过cat输出你的程序的输出,它在生成时也不会显示输出:

 ./main | cat 

既然你有代码,最简单的解决方法是禁用stdout缓冲:

 #include <stdio.h> setbuf(stdout, NULL); 

或者,在每个printf()之后调用fflush(stdout) printf()