Nodejs总是无法完全捕获子进程的stdout数据,除非子进程fllush(stdout)

时间:2015-03-26 14:47:42

标签: node.js stdout child-process spawn

我使用nodejs捕获其子进程的stdout数据,但总是捕获子进程的stdout数据的前一部分。当我添加 fllush(stdout)时,它可以正常工作。但我不知道为什么,也不想添加flush(stdout)。

这是我的代码:

var tail_child = spawn(exefile, [arg1, arg2, arg3]);
tail_child.stdin.write('msg\n');    
tail_child.stdout.on('data', function(data) {    
    console.log(data);    
});

child_process.c

printf("data\n");

需要你的帮助!非常感谢你!

1 个答案:

答案 0 :(得分:1)

默认情况下,stdout通常会被缓冲,直到写入换行符。但是,如果stdout不是tty(这是child_process.spawn()的情况),则无论换行如何都会缓冲所有输出。

如果您不想手动使用fflush(),则可以在C程序开头执行stdout一次完全禁用setbuf(stdout, NULL);缓冲。