Forum: PC-Programmierung Systembefehl unter C++


von Matthias R. (mons)


Lesenswert?

Hallo,
mit dieser Funktion:
1
QString myprog::exec(QString cmd) {
2
3
    FILE* pipe = popen(cmd.toStdString().c_str(), "r");
4
    if (!pipe) return "ERROR";
5
6
    char buffer[128];
7
8
    QString result = "";
9
    sleep(5);
10
    while(!feof(pipe)) {
11
        if(fgets(buffer, 128, pipe) != NULL)
12
                result.append(result);
13
    }
14
    pclose(pipe);
15
    return result;
16
}

versuche ich, die Ausgabe eines Programms auszulesen (sie funktioniert 
so nicht, das weis ich).
Das Problem ist nur, dass diese FUnktion NUR dann den stdio aus, wenn 
direkt eine Ausgabe des Programms kommt, ich muss aber warten, bis das 
Programm beendet ist. ähnlich wie ein system(); befehl, nur dass ich die 
Ausgabe in einem String brauche.. :)
Kennt einer eine Lösung oder hat eine Idee?
LG Matthias

von Klaus W. (mfgkw)


Lesenswert?

Ich habe ehrlich gesagt die Frage nicht verstanden.

von Sven P. (Gast)


Lesenswert?

Spricht was gegen QProcess?

von Mark B. (markbrandis)


Lesenswert?

Klaus Wachtler schrieb:
> Ich habe ehrlich gesagt die Frage nicht verstanden.

Dies.

Beschreib doch mal den eigentlichen Anwendungsfall. Du willst die 
Ausgabe eines anderen Programmes/Prozesses auswerten, diese kann aber 
existieren oder auch nicht? Oder wie? Und wenn sie existiert, liegt sie 
in Form einer Datei vor?

von Matthias R. (mons)


Lesenswert?

Hat sich erledigt..
QProcess hat nicht so ganz funktioniert..
ich hab die ausgabe des programms einfach in eine datei geschrieben 
(also
system("./irgendwas > output.txt"); ).

von Sven B. (scummos)


Lesenswert?

Oh Gott, bitte nicht. Lies die Dokumentation für QProcess, das 
funktioniert wunderbar. Diese Lösung die du da hast ist ganz ganz 
schrecklich.

Was ist denn dein Problem mit QProcess? Poste mal den Code dafür.

Und dieses sleep! Das fordert ja Probleme aller Art geradezu heraus.

Schau dir insbesondere mal an:
http://doc.qt.digia.com/qt/qprocess.html#readAllStandardOutput
http://doc.qt.digia.com/qt/qprocess.html#waitForFinished
http://doc.qt.digia.com/qt/qprocess.html#state
http://doc.qt.digia.com/qt/qprocess.html#waitForReadyRead

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.