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

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

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: Как при нажатии кнопки выполнить консольную команду?  (Прочитано 23352 раз)
wildcat
Гость
« Ответ #45 : Январь 30, 2012, 14:46 »

спасибо, понял ошибку, команда ls заработала, и выводит результат в textEdit.

но, команда usbController add не работает.
Код
C++ (Qt)
p_usbController = new QProcess();
   QString program = "/sbin/usbController";
   QStringList arguments;
   arguments <<"add"<<" "<<lineEdit_1->text()<<lineEdit_2->text()<<"system_u:object_r:removable_t:"<<lineEdit_3->text()<<lineEdit_4->text()<<lineEdit_5->text()<<lineEdit_6->text();
   p_usbController->start(program, arguments);
Записан
mutineer
Гость
« Ответ #46 : Январь 30, 2012, 14:56 »

как должен выглядеть вызов usbController из консоли и какое содержимое лайнэдитов?
Записан
wildcat
Гость
« Ответ #47 : Январь 30, 2012, 15:06 »

Вот так:
usbController add <название> <серия> <контекст_безопасности> <owner> <group> <атрибуты доступа>

usbController add flash 123 system_u:object_r:removable_t:s0 user user 0077
Записан
mutineer
Гость
« Ответ #48 : Январь 30, 2012, 15:09 »

Код
C++ (Qt)
arguments <<"add"<<" "<<lineEdit_1->text()<<lineEdit_2->text()<<"system_u:object_r:removable_t:"<<lineEdit_3->text()<<lineEdit_4->text()<<lineEdit_5->text()<<lineEdit_6->text();
   p_usbController->start(program, arguments);

Это будет преобразовано в такой вызов (или похожий на него)

Код
Bash
usbController add " " flash 123 system_u:object_r:removable_t: s0 user user 0077
А это вроде как неправильно
Записан
wildcat
Гость
« Ответ #49 : Январь 30, 2012, 15:15 »

Теперь понятно в чем дело, символ пробела возникает:

Код
C++ (Qt)
"system_u:object_r:removable_t:"<<lineEdit_3->text()
Записан
mutineer
Гость
« Ответ #50 : Январь 30, 2012, 15:17 »

и второй параметр тоже (" ") какой-то странный
Записан
wildcat
Гость
« Ответ #51 : Январь 30, 2012, 15:39 »

как можно избавится от лишнего пробела?
Записан
mutineer
Гость
« Ответ #52 : Январь 30, 2012, 15:42 »

Ну пипец...

Код
C++ (Qt)
QString param("system_u:object_r:removable_t:");
param.append(lineEdit_3->text());
...
arguments << ... << lineEdit_2->text() << param << lineEdit_4->text() <<...;
 
Записан
wildcat
Гость
« Ответ #53 : Январь 30, 2012, 15:52 »

СПАСИБО ВАМ ОГРОМНОЕ, ВСЕ ЗАРАБОТАЛО!!!  Улыбающийся

Код
C++ (Qt)
void usbController::buttonBox_ok()
{
   p_usbController = new QProcess();
   QString program = "/sbin/usbController";
   QStringList arguments;
   QString se_context("system_u:object_r:removable_t:");
   se_context.append(lineEdit_3->text());
   arguments <<"add"<<lineEdit_1->text()<<lineEdit_2->text()<<se_context<<lineEdit_4->text()<<lineEdit_5->text()<<lineEdit_6->text();
   p_usbController->start(program, arguments);
 
}
 
« Последнее редактирование: Январь 30, 2012, 22:08 от wildcat » Записан
wildcat
Гость
« Ответ #54 : Февраль 14, 2012, 10:52 »

Подскажите пожалуйста, что не так делаю?
Запускаю скрипт и хочу вывод скрипта вывести в textEdit. Выполняю:

Код
C++ (Qt)
    p_get_usb = new QProcess();
   QString get_usb = "/sbin/usb_storages.sh";
   p_get_usb->start(get_usb);
   textEdit->append(p_get_usb->readAllStandardOutput());
 

вывод не заносится в textEdit
Записан
BRE
Гость
« Ответ #55 : Февраль 14, 2012, 10:59 »

Нужно дождаться, что бы запускаемая программа что-то вывела в пайп.
Записан
wildcat
Гость
« Ответ #56 : Февраль 14, 2012, 11:12 »

вот так делаю тоже ноль...

Код
C++ (Qt)
void usbController::s_addComboBox()
{
   p_get_usb = new QProcess();
   QString get_usb = "/sbin/usb_storages.sh";
   connect(p_get_usb, SIGNAL(readyReadStandardOutput()), SLOT(slotDataOnStdout()));
   connect(p_get_usb, SIGNAL(readyReadStandardError()), SLOT(slotDataOnStdout()));
 
 
}
 
void usbController::slotDataOnStdout()
{
   textEdit->append(p_get_usb->readAllStandardOutput());
   textEdit->append(p_get_usb->readAllStandardError());
 
}

сам скрипт в консоли на раз выполняется...
Записан
wildcat
Гость
« Ответ #57 : Февраль 14, 2012, 11:20 »

и так..
   
Код
C++ (Qt)
p_get_usb = new QProcess();
   QString get_usb = "/sbin/usb_storages.sh";
   p_get_usb->start(get_usb);
   sleep(5);
   textEdit->append(p_get_usb->readAllStandardOutput());

может что то не так делаю?
Записан
sudo
Гость
« Ответ #58 : Февраль 14, 2012, 11:29 »

Пардон, тред прочитать не успел, только пару последних сообщений Улыбающийся
У QProcess есть метод waitForFinished, поэтому можно обойтись без всяких слипов
Записан
mutineer
Гость
« Ответ #59 : Февраль 14, 2012, 11:38 »

вот так делаю тоже ноль...

Код
C++ (Qt)
void usbController::s_addComboBox()
{
   p_get_usb = new QProcess();
   QString get_usb = "/sbin/usb_storages.sh";
   connect(p_get_usb, SIGNAL(readyReadStandardOutput()), SLOT(slotDataOnStdout()));
   connect(p_get_usb, SIGNAL(readyReadStandardError()), SLOT(slotDataOnStdout()));
 
 
}
 
void usbController::slotDataOnStdout()
{
   textEdit->append(p_get_usb->readAllStandardOutput());
   textEdit->append(p_get_usb->readAllStandardError());
 
}

сам скрипт в консоли на раз выполняется...
а где вызов start() ?
Записан
Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


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