Programm mit QProcess starten und Ausgaben abfangen

Alles rund um die Programmierung mit Qt
Antworten
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Programm mit QProcess starten und Ausgaben abfangen

Beitrag von FaS »

Hintergrund
Da ich keine plattformunabhängige Möglichkeit gefunden habe die (u.a. von 7-Zip verwendete) LZMA-Kompression zu benutzen, hab ich mich entschlossen die Konsolenversion von 7-Zip zu benutzen (7za.exe), für die es auch eine Linux-Version gibt.

Problem
Ich möchte den Fortschritt der Kompression auslesen, um ihn in einem Fortschrittsbalken anzuzeigen.
Startet man das Programm in einer Windows-Konsole, wird der Fortschritt unten rechts ständig in Prozent aktualisiert (siehe erster Screenshot).
In Qt liefert mir QProcess::readyReadStandardOutput() aber nur am Ende die allerletzte Ausgabe, mit dem Inhalt, wie er auch in der Konsole als letztes angezeigt wird (siehe letzter Screenshot).

Was kann ich machen, um an die Statusinformationen während dem Komprimieren zu gelangen?

Bin für jeden Hinweis dankbar,
FaS
Dateianhänge
Nach der Kompression (Programmende)
Nach der Kompression (Programmende)
Ende.png (11.25 KiB) 3992 mal betrachtet
Während der Kompression (Ständige Aktualisierung der Fortschrittsangabe)
Während der Kompression (Ständige Aktualisierung der Fortschrittsangabe)
Fortschritt.png (13.63 KiB) 3992 mal betrachtet
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Ohne es getestet zu haben, könntest du in einem Thread oder per Timer versuchen

fflush(stdout);

aufzurufen. Evtl. reicht das um ein readyReadStandardOutput Signal auszulösen.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Und wie komme ich an das stdout eines mit QProcess::start() gestarteten Prozesses?
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

über readAllStandardOutput() ?
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Ich meine den Parameter für den fflush()-Befehl.
Wenn ich das 1:1 übernehme - fflush(stdout); - passiert nichts, keine zusätzlichen readyReadStandardOutput() signals. Ist ja auch eigentlich keine normale Ausgabe, der ändert ja direkt den Prozentwert statt einen neuen Auszugeben..
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Hm,... evtl. hilft dir das weiter:
http://support.microsoft.com/?scid=kb%3 ... &x=16&y=17

sonst kann ich dir grad auch nicht weiterhelfen.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Hmm danke, aber das ist wohl sehr windows-spezifisch, ich bräuchte sowas auch für Linux. Ich hatte gehofft irgendwie über Qt da ranzukommen; dachte den Output eines Konsolen-Programms zu lesen wäre.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Könnte es sein, daß das Zip-Programm einen Parameter hat um die Statusanzeige an-/abzuschalten oder daß es von der Art der Ausgabekonsole abhängig ist ob der Fortschritt angezeigt wird?
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Hab ich auch schon überlegt, gibts leider nicht.
Antworten