Russian Qt Forum
Ноябрь 24, 2024, 07:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: перехват stdout в Linux  (Прочитано 8795 раз)
izoomer
Гость
« : Ноябрь 20, 2006, 11:56 »

QT-4.2
Программа запускает скрипт. Этот скрипт выводит на консоль некий текст. Как перехватить этот текст в программе на QT? Спасибо.
Записан
Tonal
Гость
« Ответ #1 : Ноябрь 20, 2006, 12:09 »

См QProcess
Записан
izoomer
Гость
« Ответ #2 : Ноябрь 20, 2006, 12:32 »

использую startDetached
два вопроса:
1.Как перехватить все таки stdout.
2.Как получить сигнал о заверешнии запущенного процесса.
Записан
Tonal
Гость
« Ответ #3 : Ноябрь 20, 2006, 13:05 »

startDetached - создаёт независимый процесс. Для него нет способа перехватить stdout, или получить сигнал о завершении средствами Qt.
Создавай объект QProcess и используй start.
Записан
izoomer
Гость
« Ответ #4 : Ноябрь 20, 2006, 14:09 »

запускаю процесс через start  но он не выполняется, т.е. пишет в консоле

QProcess: Destroyed while process is still running

А если через startDetached то все ОК
Записан
Dendy
Гость
« Ответ #5 : Ноябрь 20, 2006, 14:54 »

Прибил екземпляр QProcess, пока программа ещё не завершилась. Так делать нехорошо. ТьІ его случайно не в стеке создал?
Записан
Tonal
Гость
« Ответ #6 : Ноябрь 20, 2006, 14:56 »

Покажи код.
Судя по сообщению, у тебя объект QProcess умирает раньше, чем оканчивается запущенный им процесс.
Ты читать умеещь?
Причитай внимательно первых 3 абзаца описания QProcess в ассистенте!
Записан
izoomer
Гость
« Ответ #7 : Ноябрь 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()
Записан
Dendy
Гость
« Ответ #8 : Ноябрь 20, 2006, 17:33 »

Отож Улыбающийся  Если Qt говорит, что такого сигнала нет - знач нет.
Записан
bigirbis
Гость
« Ответ #9 : Ноябрь 20, 2006, 20:39 »

void QProcess::readyReadStandardOutput ()  [signal]
Записан
izoomer
Гость
« Ответ #10 : Ноябрь 20, 2006, 23:24 »

Всем спасибо.
Справился с вашей помощью.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.084 секунд. Запросов: 21.