Python子stream程Popen:在Windows上将二进制数据发送到C ++

经过三天的密集的googleing和stackoverflowing我或多或less让我的程序工作。 我尝试了很多东西,发现很多答案连接到我的问题,但没有工作的解决scheme。 Sry应该错过了正确的页面! 我期待意见和build议。

任务:

  • 二进制数据(浮点数)从python发送到C ++程序,返回一些浮点数
  • 数据将是20ms的声卡input,延迟是有点关键
  • 平台:Windows(仅适用于声卡的驱动程序…)
  • Popenpipe道,但没有沟通,因为我想保持打开C ++程序

整个事情在testing数据的ubuntu上工作得很好。 在Windows上,我遇到了二进制stream问题:Windows检查浮动stream为EOF字符,并随机find它。 然后,一切都冻结,等待在“eof”墙后面的stream量数据。 或者我可以拍照。

最后,这两件事情是必要的:

#include <io.h> #include <fcntl.h> 

 if (_setmode(_fileno(stdin), _O_BINARY) == -1) {cout << "binary mode problem" << endl; return 1;}; 

在C ++中描述: https : //msdn.microsoft.com/en-us/library/aa298581%28v=vs.60%29.aspx 。

  • cin.ignore()冻结使用二进制模式! 猜测,因为没有任何东西了。 虽然没有尝试/仔细考虑这个问题
  • cin.read(mem,sizeof(float)* length)做这个工作,因为我知道数据stream的长度
  • 与MinGW编译

在Python代码中也是一样的! (先忘了,花一天吧):

 if sys.platform.find("win") > -1: import msvcrt,os process = subprocess.Popen("cprogram.exe",stdin=subprocess.PIPE,stdout=subprocess.PIPE,bufsize=2**12) msvcrt.setmode(process.stdin.fileno(), os.O_BINARY) 

 process.stdin.write(data.tostring())