Russian Qt Forum
Ноябрь 23, 2024, 04:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Не могу читать данные от QProcess в реальном времени
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Не могу читать данные от QProcess в реальном времени (Прочитано 7144 раз)
aasedov
Гость
Не могу читать данные от QProcess в реальном времени
«
:
Октябрь 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 для объекта процесса также ничего не дала.
Мне нужно наладить получение от запущенной программы коротких сообщений в две-три строки для последующего анализа до того, как запущенная программа даже подумает завершиться. Но пока получается принимать только большие объемы текстовых данных.
Помогите пожалуйста!
Записан
andrew.k
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #1 :
Октябрь 26, 2011, 23:48 »
видимо она их так отправляет большими кусками.
Делал подобное таких проблем не было.
Записан
aasedov
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #2 :
Октябрь 26, 2011, 23:54 »
Я знаю, КАК она их отправляет. Первое сообщение в три строки отправляется сразу после запуска (еще до ввода каких-либо данных), но в вызывающей программе полная тишина.
Кстати - ввод через stdin работает нормально (сообщения доходят до приложения).
Записан
thechicho
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #3 :
Октябрь 27, 2011, 23:00 »
// Я знаю, КАК она их отправляет
А ЧО СПРАШИВАЕШЬ ТОГДА?
Записан
kamre
Частый гость
Offline
Сообщений: 233
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #4 :
Октябрь 28, 2011, 11:22 »
Цитата: aasedov от Октябрь 26, 2011, 23:54
Я знаю, КАК она их отправляет. Первое сообщение в три строки отправляется сразу после запуска (еще до ввода каких-либо данных), но в вызывающей программе полная тишина.
Скорее всего это проблема с буферизацией вывода, когда вывод делается не на экран.
Что будет если запустить программу с перенаправлением вывода в файл? Там сразу появляются эти три строчки?
Если нет, то программа должна делать flush для stdout в тех местах, где сообщение нужно обязательно показать.
Записан
aasedov
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #5 :
Октябрь 29, 2011, 19:33 »
Цитата: kamre от Октябрь 28, 2011, 11:22
Скорее всего это проблема с буферизацией вывода, когда вывод делается не на экран.
Что будет если запустить программу с перенаправлением вывода в файл? Там сразу появляются эти три строчки?
Если нет, то программа должна делать flush для stdout в тех местах, где сообщение нужно обязательно показать.
Я об этом уже думал. Жаль, что функция flush реализована не в классе QIODevice, а только в некоторых его потомках (например в QFile).
Проблема в том, что программ, которые мне нужно запускать таким образом, не одна. Написаны они на разных языках, исходники некоторых давно потеряны...
А за совет с перенаправлением в файл - спасибо. Сам попробовать почему-то не догадался
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #6 :
Октябрь 30, 2011, 12:45 »
2
aasedov
:
Почему не указываешь какая платформа
И как запускаешь?
Записан
Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #7 :
Октябрь 30, 2011, 13:12 »
Цитата: GreatSnake от Октябрь 30, 2011, 12:45
2
aasedov
:
Почему не указываешь какая платформа
И как запускаешь?
Чтобы форумчане развивали фантазию и интуицию.
Записан
kamre
Частый гость
Offline
Сообщений: 233
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #8 :
Октябрь 30, 2011, 14:10 »
Цитата: andrew.k от Октябрь 30, 2011, 13:12
Чтобы форумчане развивали фантазию и интуицию.
Развиваю: платформа винда, есть куча exe-шников, от которых даже исходники потеряны )
И проблема очень похожа на
bug в Eclipse CDT
.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #9 :
Октябрь 30, 2011, 14:35 »
Цитата: kamre от Октябрь 30, 2011, 14:10
Цитата: andrew.k от Октябрь 30, 2011, 13:12
Чтобы форумчане развивали фантазию и интуицию.
Развиваю: платформа винда, есть куча exe-шников, от которых даже исходники потеряны )
И проблема очень похожа на
bug в Eclipse CDT
.
Ну там же всё сказано, поэтому QProcess тебе не поможет - нужно всё делать самому через WinAPI
Записан
Qt 5.11/4.8.7 (X11/Win)
aasedov
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #10 :
Октябрь 30, 2011, 16:58 »
Цитата: kamre от Октябрь 30, 2011, 14:10
Цитата: andrew.k от Октябрь 30, 2011, 13:12
Чтобы форумчане развивали фантазию и интуицию.
Развиваю: платформа винда, есть куча exe-шников, от которых даже исходники потеряны )
И проблема очень похожа на
bug в Eclipse CDT
.
Я не очень силен с английским. Поясните пожалуйста коротко, в чем суть указанной проблемы?
Цитата: GreatSnake от Октябрь 30, 2011, 14:35
Ну там же всё сказано, поэтому QProcess тебе не поможет - нужно всё делать самому через WinAPI
Вот этого то я и боялся
Записан
andrew.k
Гость
Re: Не могу читать данные от QProcess в реальном времени
«
Ответ #11 :
Октябрь 30, 2011, 18:59 »
Сдается мне, что только симптомы одинаковые, а заболевания разные.
Это разные проблемы.
Можно предложить выложить сюда этот самый бинарник, чтобы желающие попробовали.
Может сложится другая картина.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...