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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess и командная строка  (Прочитано 5273 раз)
ysfox
Гость
« : Ноябрь 11, 2010, 18:27 »

Вопрос собственно вот какой:
подаю команду через командную строку, и все работает хорошо выдает результат - количество файлов в каталоге
Код:
system("find Files -print | wc -l");
делаю тоже самое через QProcess, и команда не работает
Код:
proc.setProcessChannelMode(QProcess::MergedChannels);
proc.setProcessChannelMode(QProcess::MergedChannels);
proc.start("find Files -print | wc -l");
     if (!proc.waitForFinished()) qDebug() << "2Make failed_2:" << proc.errorString();
     else qDebug() << proc.readAll();
proc.close();

выкидывает вот такую ошибку:
Код:
2MAKE OUTPUT_2: "BUSYBOX V1.2.1 (2008.12.11-18:16+0000) MULTI-CALL BINARY

USAGE: FIND [PATH...] [EXPRESSION]

"

Скажыте пожалуйста в чем может быть проблема

гадываюсь что процес не может передать результат первого вычисления во фторую команду
Код:
wc -l
но вот почему? никак не пойму...
Записан
crossly
Гость
« Ответ #1 : Ноябрь 11, 2010, 18:32 »

потому как QProcess не поддерживает перенаправление ввода/вывода и конвейеры ... что кстати говоря не раз обсуждалось на форуме....
используйте
Код:
void QProcess::setStandardOutputProcess ( QProcess * destination )
Записан
ysfox
Гость
« Ответ #2 : Ноябрь 11, 2010, 18:36 »

Спасибо попробую...
И извините за флуд, просто действительно не нашол похожей темы, наверное плохо искал Улыбающийся

даже забыл что можно передавать результат одного процеса второму... я никогда просто этой способностью не пользовался. только вот как правильно ней воспользоватся, но это такое поищю примеры в интернете.. спасибо!
« Последнее редактирование: Ноябрь 11, 2010, 18:43 от ysfox » Записан
crossly
Гость
« Ответ #3 : Ноябрь 11, 2010, 18:48 »

в первую очередь искать надо не в интернете а в ассистенте ....
Записан
ysfox
Гость
« Ответ #4 : Ноябрь 11, 2010, 18:51 »

знаю)
но там в основном примеров использования нет только описание, я туда сразу же заглянул как увидел Ваш пост Улыбающийся... некоторые функцыи и без примеров довольно просты, а вот эту лучше в картинках Улыбающийся (там эсть пример но вот когда в консольку вывести выполнение 1го процесса и второго мне это интересно)
« Последнее редактирование: Ноябрь 12, 2010, 10:12 от ysfox » Записан
ysfox
Гость
« Ответ #5 : Ноябрь 12, 2010, 11:39 »

сделал вот так:
    proc.setProcessChannelMode(QProcess::MergedChannels);
    proc_2.setProcessChannelMode(QProcess::MergedChannels);
                    proc.setStandardOutputProcess(&proc_2);
                    proc.start("find Files -print");
                    proc_2.start("wc -l");
                        if (!proc.waitForFinished()) { qDebug() << "Make_Proc failed:" << proc.errorString(); }
                        else                         { qDebug() << "Make_Proc output:" << proc.readAll(); };
                        proc.close();
                        if (!proc_2.waitForFinished()) { qDebug() << "Make_Proc_2 failed:" << proc_2.errorString(); }
                        else                           {
                                                         Rez_String= proc_2.readAll();
                                                         Rez_String.remove(" ");
                                                         Rez_String.remove("\t");
                                                         Rez_Files_int = Rez_String.toLong();
                                                         qDebug() << "Make_Proc_2 output:" << Rez_String; };
                        proc_2.close();

все работает  Улыбающийся
спасибо за совет...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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