QProcess - stdout lesen

Alles rund um die Programmierung mit Qt
Antworten
th3AddY
Beiträge: 11
Registriert: 7. Februar 2013 07:07

QProcess - stdout lesen

Beitrag von th3AddY »

Hallo,
Ich möchte über QProcess ein Programm laufen lassen, dessen Ausgaben schließlich gelesen werden sollen.
Die Implementierung sieht im Groben folgendermaßen aus:

Code: Alles auswählen

void MyProcess::finishedSlot(int exitCode, QProcess::ExitStatus exitStatus)
{
	m_output.append(readAllStandardOutput());
	printf("%s", m_output.toStdString().c_str());
}

void MyProcess::readOutputSlot()
{
	m_output.append(readAllStandardOutput());
}
MyProcess erbt von QProcess.
Die beiden Methoden sind an die Signale finished() und readyReadStandardOutput() gebunden.
Ich nutze QT 5.0.1

Das Programm, das im QProcess läuft, ruft fflush(stdout) nach jedem printf() um sicherzustellen, dass der stdout-buffer geleert wird.

Das funktioniert meistens wunderbar, jedoch nicht immer. In manchen Fällen erhalte ich nicht alle Ausgaben, sondern nur die ersten. Der Rest wird einfach verschluckt. Ich habe auch schon probiert, via

Code: Alles auswählen

setvbuf(stdout, NULL,_IONBF, 0);
die Ausgaben ohne buffering durchzuführen. Jedoch erhalte ich dasselbe Ergebnis.

Ich wäre sehr dankbar, wenn ihr mir helfen könnt.
th3AddY
Beiträge: 11
Registriert: 7. Februar 2013 07:07

Re: QProcess - stdout lesen

Beitrag von th3AddY »

Wenn ich vor Beendigung des Programms ein Sleep(10) einbaue, dann ist es wahrscheinlicher die kompletten Ausgaben zu erhalten. Dies ist aber keine gute Lösung.
Daraus würde ich schlussfolgern, dass bei Beendigung alle Ausgaben die noch nicht geflusht sind, verschluckt werden und fflush(stdout) auch nur asynchron ist. Dies erscheint mir jedoch sehr seltsam.
Gibt es irgendeine Möglichkeit, das Programm warten zu lassen bis der Ausgabebuffer geleert ist?
Antworten