Название: QProcess и консольные приложения Отправлено: bond_e от Июль 03, 2007, 15:17 Когда я запускаю консольное приложение с помощью QProcess (функция start() ), для него не создается окно, т.е. приложение "не видно". Нельзя ли как-то разрешить эту ситуацию, т.к. информация, выводимая этим приложением, важна. ReadStandardOutput не срабатывает - ничего не передается
Можно правда запускать приложение с помощью startDetached() - тогда окно создается, но при этом нет возможности следить за процессом средствами QProcess: останавливать и перезапускать при необходимости Название: QProcess и консольные приложения Отправлено: Emc от Июль 03, 2007, 17:26 хмм должно работать
на сигнал readyReadStandardOutput () вешаешь слот с readAllStandardOutput () -------- лучше выложи код - скорей всего у тебя ошибка Название: QProcess и консольные приложения Отправлено: Spicos от Июль 04, 2007, 05:44 http://prog.org.ru/forum/htopic_4175_qprocess.html
Название: QProcess и консольные приложения Отправлено: bond_e от Июль 04, 2007, 15:10 нет там ошибки - простая консольная програма, общающаяся с пользователем посредством gets/puts/printf например. в stdout напрямую ничего не идет - буферизуется, надо полагать. можно было бы конечно fflush этот буфер, но программа чужая, в ней ничего не поменяешь.
QProcess start() стартует процесс с параметром CREATE_NO_WINDOW (в windows), что и блокирует создание окна для консольных приложений. cmd.exe тут ни при чем. разве что использовать cmd /c start proga.exe - но это не выход Название: QProcess и консольные приложения Отправлено: Emc от Июль 04, 2007, 20:26 если при запуске в cmd чужой программы (отдельно от твоей) она выкидывает сообщение в консоль -- то все должно работать (наличие/отсутствие консольных окон роли не играет, если нет - то ничем не вылечишь - обращайся к автору программы. Еще раз просьба выкладывай код, заниматься гаданием не очень интересно
Название: QProcess и консольные приложения Отправлено: Alex03 от Июль 05, 2007, 12:05 Проверьте что оно именно в stdout всё выплёвывает а не в stderr.
Название: QProcess и консольные приложения Отправлено: bond_e от Июль 05, 2007, 16:40 хорошо, вот пример (работающий, можно скомпилить и запустить):
1. testcon.cpp - интерактивная консольная программа, имитируюшая диалог с пользователем Код: #include <stdio.h> 2. myprocess.cpp Код: #include "myprocess.h" 2. myprocess.h Код: #include <QtGui> собиралось в Qt 4.3 кнопка "start" запускает консольную программу, кнопка "input" помещает набранный в lineEdit текст в stdin запущенного процесса, в textEdit помещается stdout запущенной программы. если бы все "должно работать", то во-первых вывелась бы первая строка из testcon ("begin test"), а затем все, что вводится по "input". но это происходит только однократно, по окончании работы testcon (надо ввести пустую строку) Название: QProcess и консольные приложения Отправлено: Emc от Июль 05, 2007, 17:27 запускал из под ide с перехватчиком stdout - в doInput добавил
cout<<"my text"<<endl; так вот "my text" я перехватил, а текст le.text() нет. myProc.write пишет куда-то не туда (буфер?). Название: QProcess и консольные приложения Отправлено: bond_e от Июль 05, 2007, 17:52 ну а куда тогда? в доках написано:
Цитировать You can then write to the process's standard input by calling write() кстати, если к примеру, в testcon.cpp добавить в начало строчку Код: setvbuf(stdout,NULL,0,_IOFBF); может быть, можно сделать это при запуске приложения? что-нить в environment например? Название: QProcess и консольные приложения Отправлено: Emc от Июль 05, 2007, 19:03 Код:
попробуй QProcess::setProcessChannelMode(QProcess::ForwardedChannels) Название: Re: QProcess и консольные приложения Отправлено: BaltikS от Декабрь 22, 2008, 12:02 Поднимаю вопрос...
Есть такое консольное приложение как psql. Люди, которые работаю с PostgreSQL думаю знают её... Так вот, возник вопрос с выводом результата работы на экран. Нужно выполнить команду Код: psql -l -U postgres Код . Функция readAllStandardOutput () возвращает всё как надо, если у пользователя Postgres нет пароля, а вот в случае установленного пароля возникают проблеммы! А именно, запрашивается ввод пароля. И тут программа не выдаёт абсолютно ничего! Как быть в данной систуации! Как отловить появление строки ввода пароля и добавить пароль программно? P.S. Форум перечитал, вопрос поднимался неоднократно, но ни одно решение не помогло. Qt 4.3.5 MSVS 2005 |