Frage

Ich dachte, ich würde die Ausgabe von einem QProcess mit dem folgenden Code erhalten:

// 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!");

Was ich erwarte, ist die Ausgabe aus dem Programm zu sehen, auf die Debug-Konsole gedruckt, aber alles, was ich sehe, ist:

  

Fertig!

Ich weiß, dass:

  • Das Programm wird gestartet in Ordnung, weil die Nachricht am Ende gedruckt wird.
  • Das Programm hat Druckausgabe den exakt gleichen Befehl im Terminal, da läuft eine lange Reihe von Text erzeugt, wie erwartet.

Was mache ich hier falsch?

War es hilfreich?

Lösung

Bevor Sie Ihren Prozess Aufruf starten:

process.setProcessChannelMode(QProcess::MergedChannels);

Es wird dazu führen, alles Druck (auch STDERR-Ausgabe) zu STDOUT ausgegeben.

Andere Tipps

Hier ist eine Klarstellung:

Nach http://doc.qt.io/qt -5 / qprocess.html # ProcessChannelMode-Enumeration ,

  • QProcess::MergedChannels: QProcess verbindet den Ausgang des laufenden Prozesses in den Standard-Ausgangskanal (stdout). Der Standardfehler Kanal (stderr) nicht erhalten alle Daten. [...]

und

  • QProcess::ForwardedChannels: QProcess leitet die Ausgabe des laufenden Prozesses auf den Hauptprozess. Alles das Kind Prozess schreibt auf die Standardausgabe und Standardfehler wird auf die Standardausgabe und Standardfehler geschrieben werden des Hauptprozesses.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top