Standard IO
-
Hallo alle beisammen!
Ich habe folgendes Problem:
Ich will, dass mein Programm ein anderes öffnet. Dieses andere Programm gibt etwas aus - ganz normal mit cout. Gibt es eine Möglichkeit, dass Programm 1 abfängt, was Programm 2 ausgibt??? Ich habe auch die ganzen Header und dll´s von Programm 2. Ich habe gehört es gibt da so etwas das sich Standard IO nennt, mitdem man das problem lösen kann. Hat jemand ne Idee oder Tipps für eine Webside, die das erklärt????
Habe überhaupt keine idee wie ich daran gehen soll.Vielen Dank schonmal für eure Hilfe!!!!!!!
-
Was auf der Konsole ausgegeben wurde, kann eigentlich nicht mehr eingelesen werden. Du könntest natürlich die Ausgaben zusätzlich in einer Textdatei speichern (oder
std::coutauf einen FileStream umleiten) und von dem anderen Programm dann diese Textdatei einlesen.
-
In den meisten Shellumgebungen kann man Ausgaben umleiten, z.B. in eine datei, oder mit einer Pipe an ein anderes Programm weiterreichen.
Bsp:ls -l | grep *.cpp > allcpps.txtgibt die Ausgabe von ls als Eingabe an grep weiter und leitet dessen Ausgabe wiederum in die Datei allcpps.txt um
-
Ok danke für die schnellen Antworten. Ich glaube das Programm, was ich meine hat extra so eine Art Ausgabe-Funktion. Ich meine die svn.exe von Subversion. Jedoch wollte ich jetzt erstmal kleine anfangen. Wie kann man denn ein externes Programm ausführen und damit Argumente mit übergeben??? Geht das mit dem Filesystem von Boost?
-
Danke Pummuckl das klappt wunderbar. Aber wie kann ich jetzt eine Datei ausführen und dabei ein Startargument übergeben??? habe gehört, das soll irgendwie mit Shell gehen. Stimmt das und wenn ja wie????
-
Unter Windows geht das auch mit simplen Verknüpfungen. Erstell eine zu deinem Programm, bearbeite die dann und dann kannst du die Parameter stumpf hinten dranhängen.
Im Code selbst dabei denken das das erste (bzw. "nullte") Element bei den Parametern immer der Befehl ist, mit dem das Programm gestartet wurde. Die eigentlichen Parameter beginnen also bei [1].
-
Ich habe das jetzt hinbekommen, dass das 2. Programm den Output in eine txt-Datei speichert. Das war auch ganz einfach mit folgendem Code:
system("svn.exe info URL>test.txt");Jedoch müsste es doch auch gehen, dass man die Ausgabe des 2. Programmes direkt wieder an das erste zurückschickt. Ich habe es wie folgt probiert:
system("svn.exe info URL >ErstesProgramm.exe");Er gibt mir keinen Fehler aus. Jedoch weiss ich nicht, wie ich die Daten Jetzt im ErstenProgramm wiederfinden kann. Auch in den Startvariablen argv und argc tut sich nichts.
Weiss einer wie man das lösen kann???
-
man kann auch unter windows das machen, was das "pipen" tut unter linux. Die windows shell(cmd) iss halt meistens nur zu bloed das anzubieten.
Eigentlich wird im Hintergrund nix anderes gemacht, als beim starten des prozesses ihm die standard ein und ausgabe auf andere "filedescriptoren" umzubiegen.
google mal danach, oder besorg dir QProcess von der QT, der macht genau dies ..
Ich meine die svn.exe von Subversion.
warum eigentlich ueber nen fremdprozess ?
svn bietet eigentlich schon ne lib und ne C-Api, mit der um Welten flexibler bist ...Ciao ...