[gelöst] Konsolenausgaben abfangen?

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

[gelöst] Konsolenausgaben abfangen?

Beitrag von mathies »

Hallo,

ich habe ein seperates Konsolenprogramm mit QProcess aus meiner GUI-App gestartet. Wird zwar erfolgreich ausgeführt, allerdings fehlen mir die Konsolenausgaben. Gibt es eine Möglichkeit diese abzufangen?
Zuletzt geändert von mathies am 29. Oktober 2008 15:36, insgesamt 4-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dafür gibt es QProcess::readAllStandardError() und QProcess::readAllStandardOutput() und diverse Signals.
MfG Christian

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

Beitrag von mathies »

Danke, genau das wars...
surfman19
Beiträge: 52
Registriert: 22. August 2008 18:20

Beitrag von surfman19 »

hi,

zeig mal bitte wie du das gelöst hast...danke!

lg
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

hi,

hier meine Umsetzung...

H-File:

Code: Alles auswählen

...
protected:
    QProcess*    myProcess;
...
protected slots:
    void    printOutput();
...
C-File:

Code: Alles auswählen

    // Konstruktor
...
    myProcess = new QProcess(this);

    QObject::connect(myProcess, SIGNAL(readyReadStandardOutput()),this,SLOT(printOutput()));

...

    // Starten des Processes
    myProcess->start(exeFile, arguments);

...

// Funktion
void MyClass::printOutput()
{
    static QByteArray tOutput;

    // lesen der Ausgaben
    tOutput = myProcess->readAllStandardOutput();

    // Darstellung in einem QPlainTextEdit oder wo auch immer Du willst
    qpte_output->appendPlainText( tOutput );
}
Hoffe es hilft Dir.
surfman19
Beiträge: 52
Registriert: 22. August 2008 18:20

Beitrag von surfman19 »

man kann sowas auch über pipes machen oder?
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Weiß ich leider nicht.

Im Moment hab ich auch ein Problem mit einem anderen Programm was ich anstarten will bzw. mit dessen Ausgaben. Das Event zum Auslesen kommt erst nachdem schon ne ganze Menge geschrieben wurde und auch immer zur gleichen Zeit, keine Ahnung ob das Programm keine Standardoutputs benutzt oder was auch immer, jedenfalls scheint es die Ausgaben erst nach einer gewissen Menge an Zeichen "freizugeben". In ner seperaten Konsole seh ich alles wunderbar und zeitnah, nur mit den Events von QProcess klappt es nicht. hab auch schon von read() bis readyReadStandardError() alles durch. Immer das gleiche.. :(

Hat da noch jemand ne Idee?
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Kann es sein, dass es sich um NICHT-Standardausgaben handelt? Gibt es für solche Ausgaben auch eine Möglichkeit diese abzufangen?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

jedenfalls scheint es die Ausgaben erst nach einer gewissen Menge an Zeichen "freizugeben".
evt. hilft http://doc.trolltech.com/4.4/qiodevice. ... eFlag-enum
"QIODevice::Unbuffered"..?
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Das hilft leider auch nicht. Ich bekomme trotzdem erst nach etlichen Ausgaben ein Signal vom QProcess. Manchmal bekomme ich dann beim Beenden des Programms auch einen Fehler beim Ausführen von read().

Ist für mich halt nur fraglich warum ich die Ausgaben sehe, wenn ich das Programm seperat in ner Konsole starte??? :(
Antworten