Непрерывная печать из сценария Python в программу C - PullRequest
0 голосов
/ 03 августа 2020

Я ищу отправку данных в программу C для использования с обменом данными RTAI FIFO, и, насколько я понимаю, нет поддержки RTAI для связи напрямую из сценария Python в пространство ядра, отсюда и мое решение.

Я использую subprocess для обработки этих сообщений, но он не работает.

Мой Python сценарий:

import subprocess
from random import seed
from random import random
p = subprocess.Popen(['./data_reciever'], 
                        stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

while True:

    seed(1)
    network_data = f"{random()}, {random()}, {random()}".encode()
    print(network_data, "from py")
    p.stdin.write(network_data)
    p.stdin.flush()

Мой C код:

#include <stdio.h>

int main(void){

    while(1){
        char data;
        scanf("%c", &data);
        printf("%c", data);
    }

    return(0);

}

Я думаю, что моя проблема заключается либо в stdin.write, либо в моем scanf, так как мой python print выводится на терминал, а моя C программа - нет.

I я пробовал многие из подобных примеров здесь, но мне не удалось заставить их работать, любая помощь будет оценена.

1 Ответ

0 голосов
/ 03 августа 2020

У меня нет большого опыта работы с Popen, но, похоже, это потому, что вы говорите, что stdout процесса будет передаваться по конвейеру, но тогда вы не пытаетесь передать данные вне. Удаление stdout=subprocess.PIPE, из списка аргументов исправляет это для меня.

p = subprocess.Popen(['./data_reciever'], 
                     stdin=subprocess.PIPE, stderr=subprocess.STDOUT)

Кроме того, вы не должны сеять в l oop. Вот почему все ваши случайные данные одинаковы.

C l oop тоже можно немного упростить:

while(1){
    char data = getchar();
    printf("%c", data);
}

Хотя это не имеет отношения к проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...