Чтение вывода неблокирующего дочернего процессаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Чтение вывода неблокирующего дочернего процесса

Сообщение Anonymous »

Я не могу понять, почему я не могу нормально общаться с дочерним процессом.
У меня есть программа на C и Python. Python необходимо запустить программу C, а затем захватить выходные данные C неблокирующим способом. В этом примере программа на C будет выводить 10 строк в секунду и завершится через 5 секунд.

Ccode.c скомпилирован с помощью: gcc -D Arch_X86 ccode. c -o ccode.bin

Код: Выделить всё

#include 
#include 
#include 
#include 

uint64_t nanos(void){
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return ts.tv_sec*1000000000ull + ts.tv_nsec;
}

int main(){
printf("\nC Code Started\n");
uint64_t nowns, ns;
int16_t n=0;
nowns=nanos();
ns=nanos();
while ((nanos()-nowns) 100000000UL){
ns=nanos();
printf("From C I got %i\n", n);
n++;
}
}
printf("C code exit\n");
}
и скрипт Python:

Код: Выделить всё

#!/usr/bin/env python3
# -*- coding: utf8 -*-

import subprocess
import time

pr=subprocess.Popen( ['./ccode.bin'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)

while True:
print (pr.stdout.read(1), end='' )
Когда я запускаю Python, программа блокируется на 5 секунд, а затем за один раз печатается 50 строк. Ожидается, что будет напечатано 10 строк в секунду, пока не пройдет 5 секунд. В реальном приложении Python представляет собой графический интерфейс tkinter с таймером, выполняемым 10 раз в секунду для захвата вывода из кода C.

Подробнее здесь: https://stackoverflow.com/questions/790 ... utput-read
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»