Название: Отловить вывод в стандартный поток Отправлено: Resager от Апрель 03, 2013, 13:05 Стоит передо мной задача отловить вывод приложения в стандартный поток. Запускаю её в консоли (CMD). Информация выводится. Пытаюсь отловить в Qt, не получается. Причем ping и ipconfig норм отлавливаю, а вот другие приложения, не стандартные виндозные или самописные, то программно не получается вывод получить. Даже по совету пробовал использовать "cmd /C команда", все равно не идет. (в примере ниже одна строка из проверенного метода за комментирована "//myprocess->start..." Помогите пожалуйста.
.H Код: #ifndef MAINWINDOW_H .CPP Код: #include "mainwindow.h" Запускал скопированный в подпапку exec проекта curl.exe и стандартный (но скопирован) attrib.exe и самописный drivespacefree.exe (выводит число в консоль) + прикрепил проект в архиве. Название: Re: Отловить вывод в стандартный поток Отправлено: carrygun от Апрель 03, 2013, 13:26 Первый мой совет я смотрю не помог, тогда второй: внимательно почитай про cmd.
Код: p->start(QString("cmd /C \"%1\"").arg(QDir::currentPath()+"/attrib.exe")); Название: Re: Отловить вывод в стандартный поток Отправлено: Resager от Апрель 03, 2013, 13:36 Ну работает для скопированной attrib.exe (консольной проги), для графической (ну точнее "не консольной", но без как такового гуя (и не QT) проги, все равно не работает.
Название: Re: Отловить вывод в стандартный поток Отправлено: mutineer от Апрель 03, 2013, 13:39 Попробуй кроме StandardOutput читать еще и StandardError
Название: Re: Отловить вывод в стандартный поток Отправлено: Resager от Апрель 03, 2013, 13:53 Увы, но нет. Добавил
Код: connect(myprocess, SIGNAL(readyReadStandardError ()), this, SLOT(outExec())); Вывело только когда неправильный путь задал, а так тоже пусто Может неконсольные проги куда-нибудь ещё отсылают? Что интересно, CMD все равно выводит (когда запускаешь руками). Название: Re: Отловить вывод в стандартный поток Отправлено: Patrin Andrey от Апрель 03, 2013, 16:01 Попробуй подождать, чтобы эта программа побольше вывода сделала. Вполне возможно что вывод ты получишь не построчно а 1 куском с кучей строчек при достижении определённого порога.
Название: Re: Отловить вывод в стандартный поток Отправлено: Resager от Апрель 03, 2013, 17:01 Попробуй подождать, чтобы эта программа побольше вывода сделала. Вполне возможно что вывод ты получишь не построчно а 1 куском с кучей строчек при достижении определённого порога. Программа выполняется очень быстро, выводит всего одну строку и завершается. Ничего не получаешь.Может просто это не стандартный поток вывода? Как тогда использовать нестандартный? Нашел один костыль - использовать лог файл, работает ещё для пару примеров, но опять же не работает для вывода из неконсольной. В месте вызова: Код: myprocess->setStandardOutputFile(programm + ".log",QIODevice::WriteOnly); В слоте на выход программы: Код: QString name = currentProcess->objectName(); |