• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

QT Konsolenoutput von externen Programmen einlesen

SuseFan15

Member
Abend!

Derzeit schreibe ich in QT 4.3 ein Programm, mit dem ich den Powerstatus, die Shutdowns, usw. von meinem Notebook regeln möchte.

Die Shutdown actions sind ja einfach zu erreichen durch QProcess:

Code:
QProcess *proc;
proc = new QProcess(this);
proc->start("/usr/bin/shutdown -h now");

(nur als einfaches beispiel)

das ganze habe ich bereits mit shutdown timer implementiert. nur jetzt möchte ich jede minute die zeit auslesen, die noch bis zum shutdown ist. Diese wird mir ja sogar angezeigt (im kwrited fenster (das sich beim zeitverzögerten shutdown öffnet)). dort steht irgendetwas von /dev/pts/0 oder so ähnlich.. nur wie lese ich das aus? (ich habe es versucht, nur irgendwie habe ich weder als user noch als root rechte für diese "datei".

weiters würde mich interessieren, wie ich z.B. von

acpi -b

den status von charged/discharging und den akkustand auslesen kann... ich dachte mir eigentlich, dass ich das mit grep regeln könnte... nur 1.: kenn ich mich damit nicht sonderlich gut aus, und 2.: kam ich selbst mit lesen der man datei nicht wirklich weiter (nur output der mir nicht weiterhilft)... und vorallem: wie verwerte ich den im programm drinnen? weil das hier:

Code:
if(proc->start("ps -A | grep shutdown")=="")
                {
                        QMessageBox::information(this, "Kill was successful!", "The shutdown process has been killed successfully!");
                }

funktioniert z.B. nicht, da proc nur void zurückgibt... ich hoffe ihr könnt mir weiterhelfen!

Mfg, Bernhard

PS: weiters ist mir gerade eingefallen, wie ich das lösen könnte mit den unterschiedlichen locations für den shutdown befehl usw.:

locate shutdown

nur: den output müsste ich in eine datei speichern... funzt das mit cat irgendwie?

PS2: wäre den output von programmen ins prog zu holen mit channels möglich? also mit readChannel usw.?
 
OP
SuseFan15

SuseFan15

Member
niemand da, der mir helfen kann? :-(

mittlerweile habe ich einen teil der probleme so gelöst, indem ich direkt auf die files zugreife (z.B. /proc/cpuinfo). jedoch finde ich nirgends ein file, wo der battery ladestatus (%) und die restliche akkulaufzeit drinnen stehen. weiß jemand zufällig wo das drinnen steht?
 

Slowmo

Member
Also der Output eines Prozesses lässt mit
Code:
QByteArray QProcess::readAllStandardOutput ()
auslesen und mit
Code:
void QProcess::setStandardOutputFile ( const QString & fileName, OpenMode mode = Truncate )
lässt sich eine Datei bestimmen in die das Output geschrieben werden kann.Aus dem ByteArray bzw. aus der Datei müsstest du dann die nötigen Informationen rauspfriemeln.

PS: Ich selber hab noch nie mit Prozessen gearbeitet, dieser Post wurde nur mit Lesen der Dokumentation von Qt4 und meinem Programmierer-Halbwissen erstellt, also keine Garantie dass es funktioniert.
 
OP
SuseFan15

SuseFan15

Member
Slowmo schrieb:
Also der Output eines Prozesses lässt mit
Code:
QByteArray QProcess::readAllStandardOutput ()
auslesen und mit
Code:
void QProcess::setStandardOutputFile ( const QString & fileName, OpenMode mode = Truncate )
lässt sich eine Datei bestimmen in die das Output geschrieben werden kann.Aus dem ByteArray bzw. aus der Datei müsstest du dann die nötigen Informationen rauspfriemeln.

PS: Ich selber hab noch nie mit Prozessen gearbeitet, dieser Post wurde nur mit Lesen der Dokumentation von Qt4 und meinem Programmierer-Halbwissen erstellt, also keine Garantie dass es funktioniert.

erstmal vielen dank für deine antwort!

ich werde es gleich einmal ausprobieren... den befehl selbst hatte ich auch gesehen, nur dadurch, dass meine englisch kenntnisse nicht die besten sind, konnte ich mit der beschreibung des befehles nicht viel anfangen.
 
OP
SuseFan15

SuseFan15

Member
SuseFan15 schrieb:
Slowmo schrieb:
Also der Output eines Prozesses lässt mit
Code:
QByteArray QProcess::readAllStandardOutput ()
auslesen und mit
Code:
void QProcess::setStandardOutputFile ( const QString & fileName, OpenMode mode = Truncate )
lässt sich eine Datei bestimmen in die das Output geschrieben werden kann.Aus dem ByteArray bzw. aus der Datei müsstest du dann die nötigen Informationen rauspfriemeln.

PS: Ich selber hab noch nie mit Prozessen gearbeitet, dieser Post wurde nur mit Lesen der Dokumentation von Qt4 und meinem Programmierer-Halbwissen erstellt, also keine Garantie dass es funktioniert.

erstmal vielen dank für deine antwort!

ich werde es gleich einmal ausprobieren... den befehl selbst hatte ich auch gesehen, nur dadurch, dass meine englisch kenntnisse nicht die besten sind, konnte ich mit der beschreibung des befehles nicht viel anfangen.

hm.. hat leider nicht funktioniert... es gab zwar keine fehlermeldung, aber er hat anscheinend nur eine leere zeile eingelesen :-(
 
Oben