Ausgabe von Konsolenprogramm nach weiteren Eingaben

kuhlmaehn

Erfahrenes Mitglied
Hallo, ich würde gerne fremde Konsolenprogramme in meinem Projekt nutzen. Wie man diese Ausführt und die Ausgabe abfängt habe ich bereits hier gefunden: http://www.java2s.com/Code/CSharp/Development-Class/RedirectingProcessOutput.htm
Jetzt habe ich aber ein Problem bei Programmen, die nicht sofort terminieren und eine Ausgabe liefern. Z.B. bei Netzwerk-Programmen wird ja oft beim öffnen nur der Server oder so übergeben und das Programm startet dann (z.B. netzp.exe 123.123.123.123). Dann kann man. "GET 123.htm" schreiben und erhält dann eine Antwort. Erst mit "quit" wird das Programm geschlossen.
Mein Problem ist jetzt, dass ich gerne die Ausgabe von "GET 123.htm" abfangen würde. Hierzu hab ich aber leider nichts gefunden...
 
Hi

Ich hab nicht ganz verstanden, was du vor hast. Aber ich geh davon aus, dass du die Anwendung über die Process-Klasse startest. Über das Property StandardOutput können Ausgaben des Prozess abgefragt werden.
 
Sorry für die Ungenauigkeit, war gestern etwas in Eile.
Also ich hab das ganze mal an einem Beispiel getestet. Das soll jetzt mal das Konsolenprogramm sein:
Code:
Console.WriteLine("Hier wird eine 1 an ein Wort gehängt!");
string asd = "";
while (!asd.Equals("quit"))
{
   asd = Console.In.ReadLine();
   string tmp = asd + "1";
   Console.WriteLine("Das ergibt " + tmp);
}
Console.WriteLine("Ende!");
Jetzt habe ich es so hinbekommen zumindest das "Hier wird eine 1..." zu bekommen:
Code:
Process p = new Process();
p.StartInfo.FileName = "constest.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
textBox1.Text = output;
Allerdings hat sich dabei ein Konsolenfenster geöffnet und ist dann hängengeblieben und ich musste es schließen.
Jetzt würde ich gerne, am besten ohne das sich ein Konsolenfenster öffnet, Strings an das Konsolenprogramm übergeben und das Ergebnis auslesen. Also in diesem Fall will ich z.B. "asd" übergeben und "Das ergibt asd1" zurückbekommen.
Irgendwie muss das ja gehen weil doch z.B. die ganzen Java Framworks auch nur die Konsolenanwendungen einbinden oder?
Danke!
 
Sorry für die Ungenauigkeit, war gestern etwas in Eile.
Also ich hab das ganze mal an einem Beispiel getestet. Das soll jetzt mal das Konsolenprogramm sein:
Code:
Console.WriteLine("Hier wird eine 1 an ein Wort gehängt!");
string asd = "";
while (!asd.Equals("quit"))
{
   asd = Console.In.ReadLine();
   string tmp = asd + "1";
   Console.WriteLine("Das ergibt " + tmp);
}
Console.WriteLine("Ende!");
Jetzt habe ich es so hinbekommen zumindest das "Hier wird eine 1..." zu bekommen:
Code:
Process p = new Process();
p.StartInfo.FileName = "constest.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string output = p.StandardOutput.ReadToEnd();
textBox1.Text = output;
Allerdings hat sich dabei ein Konsolenfenster geöffnet und ist dann hängengeblieben und ich musste es schließen.
Natürlich ist es "hängengeblieben" - es wartete auf eine Eingabe.
Jetzt würde ich gerne, am besten ohne das sich ein Konsolenfenster öffnet, Strings an das Konsolenprogramm übergeben und das Ergebnis auslesen. Also in diesem Fall will ich z.B. "asd" übergeben und "Das ergibt asd1" zurückbekommen.
C#:
p.StartInfo.RedirectStandardInput = true;
// ...
p.StandardInput.WriteLine("asd\nquit");

Damit sich kein Konsolenfenster öffnet mußt du eben kein Konsolenprogramm erstellen.

Gruß
 
Ah super dank dir. Eigentlich ja ganz logisch aber da bin ich nicht drauf gekommen :)
Mh ok mit dem Konsolen-Fenster hast du recht. Dann wird es wohl bei den Javaprogrammen einen Parameter geben, dass die Konsole nicht geöffnet wird.
Danke nochmal allen! :)
 
Zurück