Название: Не могу читать данные от QProcess в реальном времени Отправлено: aasedov от Октябрь 26, 2011, 23:44 Здравствуйте! Моя проблема состоит в следующем.
Есть констольное приложение (не Qt, и даже не C++), которое общается с операторам, выводя ему сообщения через stdout, и запрашивая от него данные через stdin (собственно, как и все такие приложения). Я попытался запустить его из-под Qt-программы, используя класс QProcess, и наладить общение моей программы и данного приложения. Проблема оказалась в том, что сигналы QProcess::readyReadStandartOutput() и QIODevice::readyRead() высылаются только в двух случаях: при завершении работы запущенного с помощью QProcess приложения (непосредственно перед посылкой сигнала QProcess::finished() ), либо при приближении объема выведенных через stdout данных к 1 МБ! Попытки читать данные не дожидаясь сигнала, используя функции чтения QProcess и QIODevice также ни к чему не привели, всё как будто бы пусто. Установка флага QIODevice::Unbuffered в QIODevice::OpenMode для объекта процесса также ничего не дала. Мне нужно наладить получение от запущенной программы коротких сообщений в две-три строки для последующего анализа до того, как запущенная программа даже подумает завершиться. Но пока получается принимать только большие объемы текстовых данных. Помогите пожалуйста! Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: andrew.k от Октябрь 26, 2011, 23:48 видимо она их так отправляет большими кусками.
Делал подобное таких проблем не было. Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: aasedov от Октябрь 26, 2011, 23:54 Я знаю, КАК она их отправляет. Первое сообщение в три строки отправляется сразу после запуска (еще до ввода каких-либо данных), но в вызывающей программе полная тишина.
Кстати - ввод через stdin работает нормально (сообщения доходят до приложения). Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: thechicho от Октябрь 27, 2011, 23:00 // Я знаю, КАК она их отправляет
А ЧО СПРАШИВАЕШЬ ТОГДА? ;D Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: kamre от Октябрь 28, 2011, 11:22 Я знаю, КАК она их отправляет. Первое сообщение в три строки отправляется сразу после запуска (еще до ввода каких-либо данных), но в вызывающей программе полная тишина. Скорее всего это проблема с буферизацией вывода, когда вывод делается не на экран.Что будет если запустить программу с перенаправлением вывода в файл? Там сразу появляются эти три строчки? Если нет, то программа должна делать flush для stdout в тех местах, где сообщение нужно обязательно показать. Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: aasedov от Октябрь 29, 2011, 19:33 Скорее всего это проблема с буферизацией вывода, когда вывод делается не на экран. Я об этом уже думал. Жаль, что функция flush реализована не в классе QIODevice, а только в некоторых его потомках (например в QFile).Что будет если запустить программу с перенаправлением вывода в файл? Там сразу появляются эти три строчки? Если нет, то программа должна делать flush для stdout в тех местах, где сообщение нужно обязательно показать. Проблема в том, что программ, которые мне нужно запускать таким образом, не одна. Написаны они на разных языках, исходники некоторых давно потеряны... А за совет с перенаправлением в файл - спасибо. Сам попробовать почему-то не догадался :) Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: GreatSnake от Октябрь 30, 2011, 12:45 2 aasedov :
Почему не указываешь какая платформа ??? И как запускаешь? Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: andrew.k от Октябрь 30, 2011, 13:12 2 aasedov : Чтобы форумчане развивали фантазию и интуицию. ;DПочему не указываешь какая платформа ??? И как запускаешь? Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: kamre от Октябрь 30, 2011, 14:10 Чтобы форумчане развивали фантазию и интуицию. ;D Развиваю: платформа винда, есть куча exe-шников, от которых даже исходники потеряны )И проблема очень похожа на bug в Eclipse CDT (https://bugs.eclipse.org/bugs/show_bug.cgi?id=173732). Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: GreatSnake от Октябрь 30, 2011, 14:35 Чтобы форумчане развивали фантазию и интуицию. ;D Развиваю: платформа винда, есть куча exe-шников, от которых даже исходники потеряны )И проблема очень похожа на bug в Eclipse CDT (https://bugs.eclipse.org/bugs/show_bug.cgi?id=173732). Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: aasedov от Октябрь 30, 2011, 16:58 Чтобы форумчане развивали фантазию и интуицию. ;D Развиваю: платформа винда, есть куча exe-шников, от которых даже исходники потеряны )И проблема очень похожа на bug в Eclipse CDT (https://bugs.eclipse.org/bugs/show_bug.cgi?id=173732). Ну там же всё сказано, поэтому QProcess тебе не поможет - нужно всё делать самому через WinAPI :( Вот этого то я и боялся :(Название: Re: Не могу читать данные от QProcess в реальном времени Отправлено: andrew.k от Октябрь 30, 2011, 18:59 Сдается мне, что только симптомы одинаковые, а заболевания разные.
Это разные проблемы. Можно предложить выложить сюда этот самый бинарник, чтобы желающие попробовали. Может сложится другая картина. |