Comment obtenir la sortie standard d'un QProcess?
Je pensais que j'allais obtenir la sortie d'un QProcess en utilisant le code suivant:
//Start the process
process.start(tr("php-cgi www/test.php"),QIODevice::ReadWrite);
//Wait for it to start
if(!process.waitForStarted())
return 0;
//Continue reading the data until EOF reached
QByteArray data;
while(process.waitForReadyRead())
data.append(process.readAll());
//Output the data
qDebug(data.data());
qDebug("Done!");
Ce que j'attends c'est de voir la sortie du programme imprimé de la console de débogage, mais tout ce que je vois est:
Fait!
Je sais que:
- Le programme est démarré bien, parce que le message de fin est imprimé.
- Le programme ne de sortie d'impression, car l'exécution de la exactement la même commande dans le terminal, produit d'une longue chaîne de texte comme prévu.
Ce que je fais mal ici?
- Jetez un oeil à la accepté de répondre à cette question similaire : stackoverflow.com/questions/2148185/...
- La Solution de cette question aussi du bon sens, mais il n'a pas à maintenir l'ordre des messages
- Il n'y a pas de point d'enfermer exécutable avec la traduction en langue macro tr(). Je doute aussi, que la mise exécutable et le paramètre comme premier argument de travail. Mieux: processus.début("php-cgi", QStringList()<<"www/test.php",QIODevice::ReadWrite);
- Si vous ne voulez pas bloquer votre application tout en QProcess pistes de regarder la réponse à cette question: stackoverflow.com/questions/10098980/...
- QProcess est Agréable. Qt est ridiculement beau!
Vous devez vous connecter pour publier un commentaire.
Avant de commencer votre processus d'appel:
Il sera la cause de l'impression de tout (même de la sortie STDERR) à STDOUT.
Voici quelques précisions:
Selon http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum,
QProcess::MergedChannels
:QProcess
fusionne la sortie du processus en cours d'exécution dans le canal de sortie standard (stdout). L'erreur standard canal (stderr) ne recevoir toutes les données.[...]mais
QProcess::ForwardedChannels
:QProcess
transmet la sortie du processus en cours d'exécution sur le processus principal. Rien le processus de l'enfant écrit sur sa sortie standard et l'erreur standard sera écrit sur la sortie standard et l'erreur standard du processus principal.