Russian Qt Forum

Qt => Общие вопросы => Тема начата: izoomer от Ноябрь 20, 2006, 11:56



Название: перехват stdout в Linux
Отправлено: izoomer от Ноябрь 20, 2006, 11:56
QT-4.2
Программа запускает скрипт. Этот скрипт выводит на консоль некий текст. Как перехватить этот текст в программе на QT? Спасибо.


Название: перехват stdout в Linux
Отправлено: Tonal от Ноябрь 20, 2006, 12:09
См QProcess


Название: перехват stdout в Linux
Отправлено: izoomer от Ноябрь 20, 2006, 12:32
использую startDetached
два вопроса:
1.Как перехватить все таки stdout.
2.Как получить сигнал о заверешнии запущенного процесса.


Название: перехват stdout в Linux
Отправлено: Tonal от Ноябрь 20, 2006, 13:05
startDetached - создаёт независимый процесс. Для него нет способа перехватить stdout, или получить сигнал о завершении средствами Qt.
Создавай объект QProcess и используй start.


Название: перехват stdout в Linux
Отправлено: izoomer от Ноябрь 20, 2006, 14:09
запускаю процесс через start  но он не выполняется, т.е. пишет в консоле

QProcess: Destroyed while process is still running

А если через startDetached то все ОК


Название: перехват stdout в Linux
Отправлено: Dendy от Ноябрь 20, 2006, 14:54
Прибил екземпляр QProcess, пока программа ещё не завершилась. Так делать нехорошо. ТьІ его случайно не в стеке создал?


Название: перехват stdout в Linux
Отправлено: Tonal от Ноябрь 20, 2006, 14:56
Покажи код.
Судя по сообщению, у тебя объект QProcess умирает раньше, чем оканчивается запущенный им процесс.
Ты читать умеещь?
Причитай внимательно первых 3 абзаца описания QProcess в ассистенте!


Название: перехват stdout в Linux
Отправлено: izoomer от Ноябрь 20, 2006, 15:47
вот код
Код:

QLabel * label;
QProcess * script;
void MyWindow::executeFile(){
    script = new QProcess(this);
    connect (script, SIGNAL(readyReadStandartOutput()), this,                        SLOT(readStdout()));
     script->start("/root/script_1");
}
void MyWindow::readStdout(){
     QByteArray data = script->readAllStandartOutput();
     label->setText(QString(data));
}

при таком коде вышеуказанная ошибка пропала(скрипты выполняются), однако появилась новая
при старте скрипта в консоле выходит две одинаковые строки с ошибкой

Object::connect: No such signsl QProcess::readyReadStandartOutput()
Object::connect: No such signsl QProcess::readyReadStandartOutput()

протупил.

readyReadStandardOutput()


Название: перехват stdout в Linux
Отправлено: Dendy от Ноябрь 20, 2006, 17:33
Отож :)  Если Qt говорит, что такого сигнала нет - знач нет.


Название: перехват stdout в Linux
Отправлено: bigirbis от Ноябрь 20, 2006, 20:39
void QProcess::readyReadStandardOutput ()  [signal]


Название: перехват stdout в Linux
Отправлено: izoomer от Ноябрь 20, 2006, 23:24
Всем спасибо.
Справился с вашей помощью.