您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在python和c ++之间传递二进制数据

在python和c ++之间传递二进制数据

问题可能是缓冲:认情况下,Cstdio缓冲所有写入stdout的内容,并且仅在写入换行符时才将缓冲区刷新回管道(行缓冲)。fflush(stdout)写入后致电时问题消失。您还可以通过中setvbuf定义的功能来禁用(或控制)缓冲<stdio.h>,例如,用于setvbuf(stdout,NULL, _IONBF, 0)完全禁用缓冲。

我已经使用以下两个程序测试了第一个变体:

import subprocess

proc = subprocess.Popen("./echotest",
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE)

proc.stdin.write('abc')
message = proc.stdout.read(3)
print "return message ->" + message + " written by python \n" 
proc.stdin.write('q')
proc.wait()

和一些C程序:

#include <stdio.h>

int main (int argc, char **argv) {
    for (;;) {
        char buf;
        fread(&buf, 1, 1, stdin);
        if ('q' == buf)
            break;
        fwrite(&buf, 1, 1, stdout);
        fflush(stdout);
    }

    return 0;
}

请注意,您必须指定要从子进程中读取的字节数,否则程序将阻塞以等待更多输出。如果这困扰您,请尝试解决此问题的方法之一

python 2022/1/1 18:26:47 有250人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶