Привет.
Как получить текст из потока 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 ничего нет... может просто я не правильно сделал команду перенаправления...?