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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение данных из stdout другого приложения через потоки консоли  (Прочитано 2388 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Июль 12, 2013, 14:38 »

Привет.
Как получить текст из потока stdout друго приложения посредством такого вызова

svn stat | my_app
где svn stat выдает нужные мне изменения, а мое приложение должно их считать и отфильтровать...
сейчас делаю через файл
svn stat > 1.log
my_app -f 1.log
но не особо это удобно...

вот весь код проги
Код:
#include <QFile>
#include <QTextStream>
#include <QStringList>
#include <QProcess>
#include <string>

bool    fixuser = false;

static  const   char    *   filenamecommand = "-f";
static  const   char    *   fixusercommand = "-u";

int main(int argc, char *argv[])
{
    QString fileName;

    ::puts("svnfixer 0.1");

    for(int i=0;i<argc;i++)
    {
        if(strcmp(argv[i],filenamecommand)==0)
        {
            if(argc<(i+2))
            {
                ::puts("Filename absent after -f param\n");
                exit(-1);
            }
            i++;
            fileName = argv[i];
        }
        if(strcmp(argv[i],fixusercommand)==0)
            fixuser = true;
    }

    QFile   file;

    if(fileName.isEmpty())
    {
        if(!file.open(0,QFile::ReadOnly))
        {
            ::puts("Can't open stdin\n");
            exit(-2);
        }
        else
            ::puts("Reading from stdin\n");
    }
    else
    {
        file.setFileName(fileName);
        if(!file.open(QFile::ReadOnly))
        {
            ::printf("Can't open file %s\n",qPrintable(fileName));
            exit(-2);
        }
    }

    QStringList svnLines;
    QTextStream textStream(&file);
    while(!textStream.atEnd())
    {
        svnLines.append(textStream.readLine(1024));
    }

    QProcess    svnProcess;
    QStringList svnParams;
    QStringList svnExecParams;
    const   QString svnCommand("svn");
    foreach (const QString & currentString, svnLines)
    {
        svnParams = currentString.split(" ",QString::SkipEmptyParts,Qt::CaseInsensitive);
        if(svnParams.size()==2)
        {
            const QString & currentParam = svnParams.first();
            const QString & currentPath = svnParams.last();
            if(currentParam=="!" || (fixuser && currentPath.contains(".user.")))
            {
                ::printf("svn remove %s\n",qPrintable(currentPath));
                svnExecParams.clear();
                svnExecParams<<"remove";
                svnExecParams<<currentPath;
                svnProcess.start(svnCommand,svnExecParams);
                svnProcess.waitForFinished();
            }
        }
    }

    exit(0);
}

когда делал svn stat |  my_app, то в stdin ничего нет... может просто я не правильно сделал команду перенаправления...?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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