Небуферизованное взаимодействие между C ++ и Python

Я хочу передать данные из C ++ в Python в Linux, и я делаю это через канал.
Моя программа на 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 plot.py выглядит так:

fig, = plt.plot([],[])
index = 0
plt.ion()
while True:
data = sys.stdin.readline().strip()
if not data:
plt.ioff()
break
index = index + 1
val = [float(n) for n in self.data.split()]

fig.set_xdata(numpy.append(fig.get_xdata(),index))
fig.set_ydata(numpy.append(fig.get_ydata(),val))
axis = list(plt.axis())
min_x = 0
max_x = max(self.fig.get_xdata())
min_y = min(self.fig.get_ydata())
max_y = max(self.fig.get_ydata())
axis[0] = min_x
axis[1] = max_x
axis[2] = min_y
axis[3] = max_y
plt.axis(axis)
plt.draw()
plt.show()

Теперь моя проблема в том, что, похоже, буферизация данных из моей функции c ++ перед передачей данных в функцию python, от которой я не могу избавиться. Я искал решение, но не смог найти ни одного. Лучшее предложение, которое я смог найти, это использовать setvbuf в функции c ++, поэтому я также попытался включить следующую строку в функцию c ++

setvbuf(cmd,NULL,_IONBUF,0)

Но это не имело никакого эффекта.

Кто-нибудь знает, как я могу передавать данные из моей функции C ++ в Python небуферизованным способом?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]