Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "удаленный" запуск make 
:(
    Опции темы
gordmiand
Дата 5.9.2013, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



команда make, консольно запущенная из каталога программы (papka/prog/), нормально собирает проект, а как мне собрать этот же проект, стоя в любом другом каталоге?
Например команда
make -w papka/prog/Makefile 
дает ответ, что “papka/prog/Makefile не требует выполнения команд” 
Понятно, что можно перейти в этот каталог через cd и дать make, но мне надо сборку программы сделать не через терминал, а в другой программе, думаю, что используя QProcess — а как мне в нем «соединить» две команды — cd papka/prog/ и make (чтобы make понимал что именно надо собирать)? 

PM MAIL   Вверх
borisbn
Дата 6.9.2013, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



> как мне в нем «соединить» две команды — cd papka/prog/ и make

Создай .cmd файл, в котором будет cd и make, и запускай его


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
gordmiand
Дата 6.9.2013, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Сделал следующее:
Код

  QProcess process;
  process.setWorkingDirectory("/papka/prog");
  process.waitForFinished();
 process.start("make");
 process.waitForFinished(600000); 

1. Так как проект может собираться достаточно долго (минут 5), то я вынужден (?) ставить временной интервал ожидания завершения процесса, иначе он, как я понял, сам завершится через какое-то системное время, не дожидаясь окончания выполнения команды. Можно ли не задавать это время ожидания завершения процесса, то есть чтобы процесс выполнял команду столько, сколько ее это надо и не завершался бы досрочно? Как это сделать?
2. Проект начинает собираться, но хотелось бы в программе видеть этот процесс сборки в режиме реального времени (построчный вывод результатов make-a допустим в listwidget-e). Как это сделать?

PM MAIL   Вверх
borisbn
Дата 6.9.2013, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(gordmiand @  6.9.2013,  10:18 Найти цитируемый пост)
сам завершится через какое-то системное время, не дожидаясь окончания выполнения команды

 smile 
такого ТОЧНО нет.
Цитата(gordmiand @  6.9.2013,  10:18 Найти цитируемый пост)
хотелось бы в программе видеть этот процесс сборки в режиме реального времени

"вешаешься" на readyReadStandardOutput и читаешь при помощи readAllStandardOutput или как из QIODevice


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 9.9.2013, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(gordmiand @  5.9.2013,  20:19 Найти цитируемый пост)
команда make, консольно запущенная из каталога программы (papka/prog/), нормально собирает проект, а как мне собрать этот же проект, стоя в любом другом каталоге?
Смотря что ты имеешь в виду. Если "временно перейти в каталог papka/prog; выполнить make; вернуться обратно", то для этого существует параметр -C: make -C papka/prog. А вот если тебе необходима "теневая сборка" (исходники в одном каталоге, а объектные и исполняемые файлы в другом", то тут уже нужно переписывать Makefile. Обычно, Makefile генерится с помощью configure или утилит вроде qmake и cmake. Если это твой случай, то в 99% случаев достаточно просто перейти в каталог сборки и из него запустить configure находящийся в каталоге исходников или qmake/cmake указав им файл проекта или каталог исходников соответственно.
PM   Вверх
gordmiand
Дата 12.9.2013, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



А как через QProcess обработать команду, требующую от оператора ответных действий (например ввод пароля после выполнения команды sudo su или scp …)? т. е. как можно программно ввести пароль в ответ на выполнение команды? Понятное дело, что можно (используя ключи) отключить ввод пароля при выполнении команд, его требующих (например при scp), но хотелось бы его все-таки вводить.
PM MAIL   Вверх
bsa
Дата 12.9.2013, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, для ввода пароля используется прямой доступ к терминалу. А так как в QProcess нет терминала, то ничего не выйдет у тебя. Используй графические аналоги: gksu/gksudo и пр.
PM   Вверх
gordmiand
Дата 13.9.2013, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



но QProcess-то я все равно могу использовать? просто в его start буду передавать не "scp ....", а запускать "gksudo scp ...". Или как мне программно использовать gksudo для программного же выполнения команды scp? 

Это сообщение отредактировал(а) gordmiand - 13.9.2013, 19:52
PM MAIL   Вверх
bsa
Дата 13.9.2013, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, почитай инструкцию на gksudo.
PM   Вверх
gordmiand
Дата 2.10.2013, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



а как мне верно использовать gksudo для выполнения удаленного копирования каталога?
команда
Код

process->start("gksudo scp -r home/papka1 [email protected]:/home/papka2");
 
выдает ошибку типа
Код

неверный параметр -r для gksudo 

без gksudo данная команда копирования верна, так же как и, например, команда
Код

gksudo ps -le

почему-то здесь параметр (-le) для команды (ps) воспринимается gksudo-м верно, а для scp - нет...
PM MAIL   Вверх
bsa
Дата 2.10.2013, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, тут тебе gksudo не поможет. Почитай инструкцию scp, может он умеет принимать пароль не только с консоли.
По поводу параметра. Подозреваю что надо использовать параметр -- или параметры программы передавать отдельными аргументами. К сожалению, я никогда не использовал gksudo и qprocess.
PM   Вверх
gordmiand
Дата 6.10.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



bsa: с программным вводом пароля для scp вроде разобрался ("убрал" ввода пароля для scp)...теперь вопрос в том как мне с помощью все того же QProcess-a зайти удаленно на компьютер (через ssh) и перейти там в папку с скопированной программой (через cd)...как эти две команды мне выполнить в одном контексте qprocess-a (как это было бы в одном сеансе работы терминала)? мне нужно "встать" в папку с программой для ее удаленной сборки (make из данного каталога) и последующего запуска... 
PM MAIL   Вверх
gordmiand
Дата 7.10.2013, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



можно сделать так
Код

ssh username@ip-addr 'command1 && command2'

пробую так
Код

ssh [email protected] 'cd /home/project && /usr/Qt/bin/qmake project.pro'

запущенная в консоли команда(ы) проходят верно, а через start QProcess-a - нет (просто программа подвисает на выполнении данной команды, хотя она должна выполняться (судя по терминальному ее запуску) достаточно быстро)...почему такое происходит и как мне программно выполнить такую строку команд?

Это сообщение отредактировал(а) gordmiand - 7.10.2013, 21:26
PM MAIL   Вверх
bsa
Дата 11.10.2013, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, ты уверен, что ssh получает пароль от тебя?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.