Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Altruist от Ноябрь 09, 2018, 00:28



Название: Запуск скрипта
Отправлено: Altruist от Ноябрь 09, 2018, 00:28
Всем привет, создаю графический интерфейс для приложения на линуксе , задача такая:

Нужно что бы по клику допустим кнопки запускался скрипт который будет работать в терминале. А результат работы терминала выводился в моем приложении.

Подскажите пожалуйста как это правильно описать в Qt creator.
Буду благодарен!


Название: Re: Запуск скрипта
Отправлено: sergek от Ноябрь 09, 2018, 08:51
Используйте QProcess. Стандартный вывод перенаправляйте в свои обработчики, например:
Код
C++ (Qt)
   QObject::connect(&process, &QProcess::readyReadStandardOutput, this, &CLanConfig::readyReadSlot);
   QObject::connect(&process, &QProcess::readyReadStandardError,  this, &CLanConfig::readErrorSlot);
 
В обработчиках примерно так:
Код
C++ (Qt)
void CLanConfig::readyReadSlot(){
   QByteArray data = process.readAllStandardOutput().simplified();
 
   if(data.contains("hostapd.service")) {
...
   } else
...
}
Пример запуска команды:
Код
C++ (Qt)
void CLanConfig::chmod(bool addLcs) {
   QString rights = addLcs? "o+r":"o-r";
   QStringList arguments;
   arguments << "-c" << "echo " + password + " | sudo -S chmod " + rights+ " " + path;
   process.start("/bin/sh", arguments);
   process.waitForFinished();
}
Со скриптом, видимо, аналогично.



Название: Re: Запуск скрипта
Отправлено: qate от Ноябрь 09, 2018, 10:58
process.waitForFinished(); - если так сделать, то события не будут приходить из консоли


Название: Re: Запуск скрипта
Отправлено: sergek от Ноябрь 09, 2018, 11:38
Так приходят же.


Название: Re: Запуск скрипта
Отправлено: qate от Ноябрь 09, 2018, 14:46
после окончания процесса или во время его долгой работы ?


Название: Re: Запуск скрипта
Отправлено: sergek от Ноябрь 09, 2018, 15:06
Не знаю) Мне нужны результаты выполнения команды, я их получаю. А когда они подгоняются, даже не задумывался.


Название: Re: Запуск скрипта
Отправлено: qate от Ноябрь 09, 2018, 15:16
да, обычно так и нужно - выполнил, посмотрел
тут даже события не нужны - читать сразу readyReadStandardOutput/readyReadStandardError после waitForFinished

но если ТС хотел "вживую" смотреть работу скрипта, или скрипт долгий, то для работы событий не должен блокироваться поток выполнения


Название: Re: Запуск скрипта
Отправлено: sergek от Ноябрь 09, 2018, 17:38
Выполняю просьбу TC - пример во вложении.