De la tuyauterie (ou de commande de chaînage) avec QProcess

J'utilise Qt et bash-dessus d'elle, besoin d'exécuter quelque chose comme:

bash: cat file | grep string

dans Qt:

QString cmd = "cat file | grep string";
QProcess *process = new QProcess;
process->start(cmd);
process->waitForBytesWritten();
process->waitForFinished();
qDebug() << process->readAll();

Le problème est dans le pipe ("|"), et les processus de returs rien. Si il n'existe pas ("|"), comme

"cat file" 

tout est ok.
J'ai essayé de qch. comme

"cat file \\| grep string", 
"cat file \| grep string" 

mais le résultat est le même. Si je copie la commande et l'exécuter dans le bash tout est ok.

QString::toAscii().data()

et d'autres transformations ont également mauvais résultat.

Essayez cmd = "bash -c 'cat file | grep string'";
Aucun argument là... Car il y a une API dédiée, votre réponse, c'est mieux. D'autre part, l'invocation du shell peut permettre pour des commandes plus complexes, par exemple à l'aide de processus de substitution, coquille d'expansion, etc, donc il peut avoir certains avantages dans certaines conditions.

OriginalL'auteur Konstantin Ivanov | 2014-01-03