Поскольку вы хотите передавать данные по конвейеру только в одном направлении, вам не нужно создавать конвейер в коде.
Самый простой способ - позволить ОС передать данные за вас, записав их в stdout
в программе C и чтение его из stdin
в Python.
Вы должны запускать программы следующим образом:
mycprog | python myscript.py
В коде C, вы должны использовать что-то вроде:
#include <stdio.h>
unsigned char buffer[BUFFER_SIZE];
/* read from sensor to buffer */
fwrite(sensor_buffer, sizeof(usigned char), BUFFER_SIZE, stdout);
На стороне Python код будет выглядеть примерно так:
import sys
sensor_bytes = sys.stdin.read(BUFFER_SIZE)
Вы также можете использовать popen
для запуска сценария Python непосредственно из кода C, но это сделает ваше решение менее гибким, и если вы когда-нибудь захотите отправить данные в другой сценарий или программу, вам придется изменить код C.
Наконец, если вы не хотите полагаться на оболочку или хотите запускать две программы в разных оболочках, вы можете создать именованный канал, используя mkfifo
.
Вот подробный пример .