Связь между программой C и Python - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время я пытаюсь написать программу C, которая взаимодействует с оборудованием, я выбрал это, поскольку производитель оборудования поставляет C SDK для этого оборудования. Однако я хочу, чтобы эта программа C выводила данные, которые она получает от оборудования (например, датчика), в канал, чтобы я мог написать программу Python для сбора данных, их анализа и выполнения некоторых аналитических задач. с этим. Я запускаю программы на Raspberry Pi (Linux). Как я могу создать канал между этими двумя разными программами (Python и C)? Могу ли я сделать это, указав местоположение трубы?

1 Ответ

3 голосов
/ 14 июля 2020

Поскольку вы хотите передавать данные по конвейеру только в одном направлении, вам не нужно создавать конвейер в коде.

Самый простой способ - позволить ОС передать данные за вас, записав их в 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.

Вот подробный пример .

...