hallo,
ich schreibe 2 programme und eines startet das andre mit QProcess und benutzt dann QProcess::write() um dem prozess befehle zu geben.
leider faellt mir nicht ein wie der gestartete prozess jetzt an die befehle herankommt. anders ausgedrueckt wo kann man diese befehle auslesen die man mit write() geschickt bekommt?
mfg qt fan
kommunikation ueber die standardausgabe
-
dontinelli
- Beiträge: 146
- Registriert: 22. September 2006 20:53
Möchtest du gerne mehrmals hin und her kommunizieren? Weil das geht, so viel ich weis, mit QProcess nicht. Ich wollte mal mit QProcess auf isql zugreifen, konnte aber jeweils nur eine Anfrage senden, da sie nur nach einem closeWriteChannel() verarbeitet wird. Und öffnen lässt sich der nicht mehr. Also in diesem fall müsstest du dich nach einer anderen Lösung umsehen...
Vieles unter Unix-Derivaten ist einfach eine "File".Standard-Input/Output (und auch Error-Input/Output) koennen daher einfach als Datei betrachtet und auch ganz genau so behandelt werden. Dieses "stdin" und "stdout" ist (bei einem Aufruf in der Konsole) also die Konsole selbst (Keyboard), kann jedoch auch ein beliebiges anderes Device sein (z.B. RS232, TCP-Sockets oder wieder eine andere File...).
Wenn du also im Parent auf den QProzess was schreibst (write()), ist das so, wie wenn jemand das Programm in der Konsole gestartet und genau diese Eingabe mittels Tastatur gemacht haette.
Du kannst also mit beliebigen Mitteln (z.B. cin/cout) von stdin/stdout lesen/schreiben. Unter Qt findet man haeufig Beispiele mit QFile (daher der obige Hinweis). Vom stdin kann z.B. mittels
gelesen werden ("stdin" ist IMHO in <stdio.h> definiert). Und hier wuerdest du also den String empfangen, welcher du mit QProcess::write() gesendet hast ("\n" fuer den readLine() nicht vergessen...)
Wenn du also im Parent auf den QProzess was schreibst (write()), ist das so, wie wenn jemand das Programm in der Konsole gestartet und genau diese Eingabe mittels Tastatur gemacht haette.
Du kannst also mit beliebigen Mitteln (z.B. cin/cout) von stdin/stdout lesen/schreiben. Unter Qt findet man haeufig Beispiele mit QFile (daher der obige Hinweis). Vom stdin kann z.B. mittels
Code: Alles auswählen
QFile myFile;
myFile.open(stdin, QFile::ReadOnly);
QString input = myFile.readLine();