使用管道将数据从c程序发送到python程序?

时间:2014-05-13 15:32:27

标签: python c pipe

我以前做过一些数字运算并在c程序中维护一个gui。我现在想在c中进行数字运算,但是将数据发送到python。然后,Python将根据发送的值创建和更新gui。

任何人都可以指向我的代码方向,将一个变量或数组从一个c程序发送到一个python程序 - 然后在python中打印它?

谢谢

1 个答案:

答案 0 :(得分:-1)

考虑:

<强> fifo.c

#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main (void)
{
    // Array to send
    int arr[] = {2,4,6,8};
    int len = 4;

    // Create FIFO
    char filename[] = "fifo.tmp";

    int s_fifo = mkfifo(filename, S_IRWXU);
    if (s_fifo != 0)
    {
        printf("mkfifo() error: %d\n", s_fifo);
        return -1;
    }

    FILE * wfd = fopen(filename, "w");
    if (wfd < 0)
    {
        printf("open() error: %d\n", wfd);
        return -1;
    }

    // Write to FIFO
    for (int i=0; i<len; i++)
    {
        int s_write = fprintf(wfd, "%d ", arr[i]);

        if (s_write < 0)
        {
            printf("fprintf() error: %d\n", s_write);
            break;
        }
    }

    // Close and delete FIFO
    fclose(wfd);
    unlink(filename);
}

<强> fifo.py

filename = "fifo.tmp"

# Block until writer finishes...
with open(filename, 'r') as f:
    data = f.read()

# Split data into an array
array = [int(x) for x in data.split()]

print array

您首先运行编写器(c),它将阻塞,直到阅读器(python)打开并读取数据。然后运行阅读器,两个进程都将终止。

$ python fifo.py
[2, 4, 6, 8]

注意:

  • 一些更好的错误处理可能是有益的(例如,如果命名的fifo存在,因为c程序没有干净地退出)。
  • 这样效率很低,因为您要将整数值转换为字符串表示并发送它。我使用它是因为空格分隔符很容易使用,但你可以考虑自己发送整数值,并在阅读器端使用固定宽度的解析。