派生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()
。