为什么node.js不能在child_process.stdout上发出数据事件?

时间:2012-07-11 03:47:49

标签: node.js

这是我的Node.JS代码

var rec = spawn('rec.exe');
rec.stdout.setEncoding('ascii');
rec.stdout.on('data', function (data) {
console.log(data);
    //do something
}
);

我的C ++程序(由Cygwin编译)使用printf()向stdout写入内容。

if(bufsize!=0&&rec[0]=='0')
    {
    printf("%s\n",rec);
    //printf("Received,write into exchange file\n");
    //fp=fopen("recvdata.txt","w");
    //fprintf(fp,"%s\n",rec);
        //fclose(fp);
}

但是数据事件永远不会发出。

我确信我的C ++代码有问题,因为它适用于ping等其他一些命令。

然后我注意到在这种情况下,会发出事件

if(fd==-1)
{
    printf("Failed,again\n");
    return 0;
}

这意味着当进程退出时,一切正常。但那不是我想要的。

有人能帮助我吗?感谢。

1 个答案:

答案 0 :(得分:1)

听起来你的C ++程序存在缓冲问题;它可能不会自动刷新stdout的每一行的缓冲区,因此所有输出都“聚集”直到它退出。我知道有一些ioctl设置可以用来改变它,但我早就忘记了它们是什么。搜索“stdout buffering”可能会带来一些有用的东西。