2013-07-17 3 views
3

Мне нужно разработать программу gui, в которой будет запущен внешний скрипт bash. Этот скрипт работает около 30-40 минут, и я хочу видеть выход системы в моем приложении в режиме реального времени. Как я могу это предоставить? Должен ли я использовать QTextStream? Просьба привести несколько примеров. Спасибо.Как перенаправить выход системы на мое приложение gui (qt, linux)?

ответ

5

Если вы запускаете скрипт через QProcess, вы можете получить вывод, подключившись к сигналу readyRead. Тогда просто нужно вызвать какие-либо функции чтения для получения данных, а затем отобразить их на любом виджете, который вы хотите, например, QTextEdit, который имеет функцию добавления для добавления текста.

Что-то вроде этого: -

// Assuming QTextEdit textEdit has been created and this is in a class 
// with a slot called updateText() 
QProcess* proc = new QProcess; 
connect(proc, SIGNAL(readyRead()), this, SLOT(updateText())); 
proc->start("pathToScript"); 

... 

// updateText in a class that stored a pointer to the QProcess, proc 
void ClassName::updateText() 
{ 
    QString appendText(proc->readAll()); 
    textEdit.append(appendText); 
} 

Теперь, каждый раз, когда скрипт производит текст, ваша функция UPDATETEXT называется, и вы добавляете его в объект QTextEdit.

+2

readyReadStandardError() и readyReadStandardOutput(), если вы хотите поймать stderr и stdout, но хотите обрабатывать их по-разному. –

+0

Спасибо, его работы, но только если я 'proc-> start' не' startDetached' ... Почему? – wlredeye

+0

К сожалению, это моя ошибка. Я отредактирую ответ. Если вы вызываете proc-> start, я предполагаю, что Qt хранит дескриптор процесса, возможно, порождает его как дочерний, но startDetached, как следует из названия, отделяется от процесса, поэтому не извлекает его вывод. Если вы действительно нуждались в нем, вы должны были бы посмотреть на IPC для связи между вашим приложением и процессом. – TheDarkKnight

Смежные вопросы