![]() |
|
![]() ![]() ![]() |
|
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
выполняю некую команду с помощью метода system - ее результат (некий принт) выводится в консоль сборки (запускаю программу из креатора)...А можно ли этот результат выполнения system-а вывести в какой-нибудь виджет (например listwidget)? как это сделать?
|
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
случайно не это?
|
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
через QProcess я пробовала - он вообще отказывается выполнять команду(ды) формата "cd/home/papka1 && ls && ...", через system все проходит, но результат выполнения команд(ы) хотелось бы видеть в программе, а не в консоли...
|
|||
|
||||
o2n3e |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: -1 Всего: -5 |
Суть в том, что system() - это запуск иного кроцесса(sh, cmd), которым ты норм рулить не можешь и его stdout нормально перехватить не можешь(не через жопу). Запускает программы баш так-то так, как я описал ниже.
Это коталоги/директориии, а не "папки". Берёшь qprocess() и запускаешь в нём баш(sh) exec()'ом с вариациями, переводишь stdout в другой поток и читаешь - купроцесс вон может это делать за тебя. Возможно там есть write_stdin() - поищи, сюда пишешь комманды. Баш работает так же. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Приведите пример как Вы это делаете. У QProcess есть соответствующие сигналы, на которые Вы можете подписаться и необходимым для Вас образом обрабатывать. В своё время, у меня никаких проблем не было при обработке стандартного вывода программы, к примеру 7z. |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
Guinness: так и делаю:
в итоге команда быстро проходит, но нужного результата не дает (сборка проекта)...с system все нормально выполняется... |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Вторую часть поста Вы, видимо, не прочитали. Попробуйте вызвать статический метод execute, весь стандартный вывод программы будет в консоли, возможно увидете какую-нибудь ошибку. Также посмотрите, что Вам вернул execute.
|
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
в итоге code = 0; не вызываются слоты slotProcessFinished, sltoReadStandardOutput... из консоли запущенная команда(ды) cd papka1 && ls срабатывает верно... без cd papka1 (только ls) execute выводит свой результат (т. е. список файлов в текущем каталоге) в консоль приложения, а не в listWidget (не вызываются слоты slotProcessFinished, sltoReadStandardOutput). Вызываются слоты slotProcessFinished, sltoReadStandardOutput только при вызове команды start qprocess-a и выполнении ею только команды ls. Так как же мне с помощью qprocess-a выполнить команду(ды) типа cd papka1 && ls ? |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Надо читать документацию - execute - статический метод:
Т.е. при его вызове никаких сигналов выбрасываться не будеть. Ваша программа будет дожидаться окончания выполнения execute, а весь вывод программы должен появиться в консоли. Кстати, что там вывелось? Если Вы хотите получать сигналы, вызывайте start. Я Вам предложил использовать execute только в целях отладки. А также, потому что я не понял, продолжает ли жить у Вас объект QProcess после вызова start или нет. А так execute должен гарантированно завершить свое выполнение. ЗЫ проверьте имена слотов. ЗЗЫ попробуйте сначала выполнять команды поотдельности, а не фигачить все сразу. Так проще и быстрее искать свои ошибки. |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
команда
ничего не выводит в консоль - видимо такую двойную команду execute не понимает, как и start...да, после выполнения start указатель на объект QProcess-a продолжает жить...по-отдельности я не могу (не знаю как) выполнить "cd papka", а затем "qmake" - мне их надо выполнить в одном контексте (а-ля одном сеансе работы терминала) |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
А абсолютные пути к *pro файлу указывать нельзя? И почему в этом случае не написать необходимый скрипт( например, на bash или python ) и вызывать уже его?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |