C和x2B之间的无缓冲通信+;和蟒蛇 < P>我想把数据从C++传入Linux的Python中,我通过管道来完成。 我的C++程序看起来像这样: #include<iostream> #include<stdio.h> #include<sstream> #include<math.h> int main() { FILE *cmd; std::ostringstream ss; double val; cmd = popen("python plot.py","w"); for (int i=0; i<100; i++) { val = cos(3.14159*i/40); ss.str(""); ss << val << std::endl; fputs(ss.str().c_str(),cmd); fflush(cmd); } fputs("\n",cmd); fflush(cmd); pclose(cmd); return 0; } 现在我的问题是,在将数据传递到Python函数之前,我的C++函数中似乎有缓冲数据,而这些函数是我无法摆脱的。我一直在寻找解决办法,但没有找到任何办法。我能找到的最好的建议是在C++函数中使用StvvBuf,所以我也尝试将下面的行包含到C++函数中 setvbuf(cmd,NULL,_IONBUF,0)

C和x2B之间的无缓冲通信+;和蟒蛇 < P>我想把数据从C++传入Linux的Python中,我通过管道来完成。 我的C++程序看起来像这样: #include<iostream> #include<stdio.h> #include<sstream> #include<math.h> int main() { FILE *cmd; std::ostringstream ss; double val; cmd = popen("python plot.py","w"); for (int i=0; i<100; i++) { val = cos(3.14159*i/40); ss.str(""); ss << val << std::endl; fputs(ss.str().c_str(),cmd); fflush(cmd); } fputs("\n",cmd); fflush(cmd); pclose(cmd); return 0; } 现在我的问题是,在将数据传递到Python函数之前,我的C++函数中似乎有缓冲数据,而这些函数是我无法摆脱的。我一直在寻找解决办法,但没有找到任何办法。我能找到的最好的建议是在C++函数中使用StvvBuf,所以我也尝试将下面的行包含到C++函数中 setvbuf(cmd,NULL,_IONBUF,0),c++,python,pipe,popen,unbuffered,C++,Python,Pipe,Popen,Unbuffered,但这并没有产生任何影响 是否有人知道我如何以无缓冲的方式将数据从我的C++函数传递给Python?< /P>你真的没有描述这个问题。你说似乎有缓冲,但没有说明你为什么这么想。你的实际问题是什么?是什么让您认为存在缓冲,并且您希望通过消除它获得什么?尝试在每个fputs流的末尾添加一行新行。不仅您对实际问题的解释不清楚,而且您的Python代码也不完整。正如戴维指出的,没有更多的信息就很难回答你的问题。你正在从C++程序中输出一条单行,所以 sys .STDIN。RealDype()/Cuffe必

但这并没有产生任何影响


是否有人知道我如何以无缓冲的方式将数据从我的C++函数传递给Python?< /P>你真的没有描述这个问题。你说似乎有缓冲,但没有说明你为什么这么想。你的实际问题是什么?是什么让您认为存在缓冲,并且您希望通过消除它获得什么?尝试在每个
fputs
流的末尾添加一行新行。不仅您对实际问题的解释不清楚,而且您的Python代码也不完整。正如戴维指出的,没有更多的信息就很难回答你的问题。你正在从C++程序中输出一条单行,所以<代码> sys .STDIN。RealDype()/Cuffe必须缓冲输入直到收到<代码> \n < />代码,至少这是<代码> RealDead()/<代码>的语义。有一些技巧可以将python的
stdin
设置为无缓冲模式,但是如果我没有弄错的话,那么您必须使用纯
read
s。
setvbuf(cmd,NULL,_IONBUF,0)