为什么node.js不能在child_process.stdout上发送数据事件?
这是我的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; }
这意味着当进程退出时,一切正常。 但那不是我想要的。
有人能帮我吗? 谢谢。
这听起来像你的C ++程序有一个缓冲的问题; 它可能不会自动刷新stdout
的每一行的缓冲区,所以所有的输出“聚集”,直到它退出。 我知道有一些ioctl
设置可以用来改变它,但是我早已忘记了它们是什么。 search“标准输出缓冲”可能会提供一些有用的东西。