printf-Ausgaben eines Konsolenprogramms abfangen

Alles rund um die Programmierung mit Qt
Antworten
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

printf-Ausgaben eines Konsolenprogramms abfangen

Beitrag von mathies »

Hallo,

kann man printf (öder ähnliche) Ausgaben eines durch einen QProcess gestarteten Konsolen-Programms abfangen? Klappt bei mir nur mit cout Ausgaben.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

printf geht nach stdout, also sollte es genauso gehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Hi,

funktioniert leider nicht. Füge ich nach nem printf() ne Leerzeile ein mit

Code: Alles auswählen

std::cout << std::endl;
bekomm ich wieder ein Event. Ohne bekomm ich erst eins nach etlichen Ausgaben, bringt mir so aber nicht viel, vor allem, wenn das durch QProcess gestartete Programm nur printf() benutzt :(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

printf() - Ausgaben werden wohl noch gepuffert. D.h. Du bekommst wie Du schon sagst die Ausgabe, aber nicht sofort. Da kann aber weder Qt noch sonstwer was dagegen tun - das muss im aufgerufenen Programm korrigiert werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Was genau gibst du mit printf aus? Hast du da ein Zeilenumbruch ("\n") drin?
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Hallo,

es sind sowohl Zeilenumbrüche \n als auch Rücksetzungen des Cursors \r drin.

Wie Christian schon sagt, es wird wohl gepuffert. Leider bringt der QIODevice::Unbuffered Flag auch nix :(

Ich habe das Programm was ich aufrufe nicht geschrieben und es hat einen sehr komplexen Logging-Prozess, da kann ich net drin rumwerkeln. Habe das jetzt mit der std::endl Leerzeile nach einem Konsolenprint umgangen.
Antworten