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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск скрипта  (Прочитано 4318 раз)
Altruist
Гость
« : Ноябрь 09, 2018, 00:28 »

Всем привет, создаю графический интерфейс для приложения на линуксе , задача такая:

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

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

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #1 : Ноябрь 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();
}
Со скриптом, видимо, аналогично.

Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #2 : Ноябрь 09, 2018, 10:58 »

process.waitForFinished(); - если так сделать, то события не будут приходить из консоли
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Ноябрь 09, 2018, 11:38 »

Так приходят же.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #4 : Ноябрь 09, 2018, 14:46 »

после окончания процесса или во время его долгой работы ?
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Ноябрь 09, 2018, 15:06 »

Не знаю) Мне нужны результаты выполнения команды, я их получаю. А когда они подгоняются, даже не задумывался.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #6 : Ноябрь 09, 2018, 15:16 »

да, обычно так и нужно - выполнил, посмотрел
тут даже события не нужны - читать сразу readyReadStandardOutput/readyReadStandardError после waitForFinished

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

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #7 : Ноябрь 09, 2018, 17:38 »

Выполняю просьбу TC - пример во вложении.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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