Russian Qt Forum

Qt => Работа с сетью => Тема начата: ysfox от Ноябрь 11, 2010, 18:27



Название: QProcess и командная строка
Отправлено: 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
но вот почему? никак не пойму...


Название: Re: QProcess и командная строка
Отправлено: crossly от Ноябрь 11, 2010, 18:32
потому как QProcess не поддерживает перенаправление ввода/вывода и конвейеры ... что кстати говоря не раз обсуждалось на форуме....
используйте
Код:
void QProcess::setStandardOutputProcess ( QProcess * destination )


Название: Re: QProcess и командная строка
Отправлено: ysfox от Ноябрь 11, 2010, 18:36
Спасибо попробую...
И извините за флуд, просто действительно не нашол похожей темы, наверное плохо искал :)

даже забыл что можно передавать результат одного процеса второму... я никогда просто этой способностью не пользовался. только вот как правильно ней воспользоватся, но это такое поищю примеры в интернете.. спасибо!


Название: Re: QProcess и командная строка
Отправлено: crossly от Ноябрь 11, 2010, 18:48
в первую очередь искать надо не в интернете а в ассистенте ....


Название: Re: QProcess и командная строка
Отправлено: ysfox от Ноябрь 11, 2010, 18:51
знаю)
но там в основном примеров использования нет только описание, я туда сразу же заглянул как увидел Ваш пост :)... некоторые функцыи и без примеров довольно просты, а вот эту лучше в картинках :) (там эсть пример но вот когда в консольку вывести выполнение 1го процесса и второго мне это интересно)


Название: Re: QProcess и командная строка
Отправлено: ysfox от Ноябрь 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();

все работает  :)
спасибо за совет...