# Kompletten InputStream der Kommandokonsole ausgeben



## Guest (30. Jun 2008)

Hi zusammen,

ich habe folgende Klasse, in der ein Skript mit Parametern ausgeführt werden soll. Diese sieht wie folgt aus:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ScriptExecutor {

	public void fuehreProgrammAus(String festplatte, String pfad) {
		try {
			String cmdstart[] = { "cmd.exe", "start", festplatte, pfad};
			Process proc = new ProcessBuilder("cmd.exe", "start", festplatte, pfad).start();
			BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			String str = br.readLine();
			System.out.println("Ausgabe der Konsole: "+str);
			
		} catch (IOException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}

	}
}
```

Nun rufe ich die Methode auf:


```
import java.net.MalformedURLException;

public class Test {
	public static void main(String[] args)
	{
		ScriptExecutor ex = new ScriptExecutor();
		ex.fuehreProgrammAus("/d", "MeinOrdner\\meinSkript --help");
	}
}
```

Leider erhalte ich natürlich immer nur eine Zeile der Ausgabe der Kommandokonsole (in diesem Fall die Version des Betriebssystems).

Wie kann man direkt alle Zeilen ausgeben lassen?

Dann könnte man prüfen, ob die Methode so richtig arbeitet. Ist die Ausführung des Skripts so korrekt?


----------



## SlaterB (30. Jun 2008)

> String str = br.readLine(); 
> System.out.println("Ausgabe der Konsole: "+str); 

->
String str = null;
while ((str = br.readLine()) != null) {
System.out.println("Ausgabe der Konsole: "+str); 
}


----------



## Guest (30. Jun 2008)

Vielen Dank für die Antwort. Allerdings wird der Befehl nicht ausgeführt.
Meiner Meinung nach ist doch der Befehl syntaktisch richtig oder?


----------



## SlaterB (30. Jun 2008)

wenn die erste eingelese Zeile null ist, dann passiert natürlich gar nix, besser doch erstmal wieder mit einfachen Befehlen arbeiten 
oder alternativ auch die Schleife testweise einfacher formulieren:


System.out.println("gleich gehts los:"); 
String str = null; 
while (true) { 
str = br.readLine();
if (str == null) {
System.out.println("str war null"); 
} else {
System.out.println("Ausgabe der Konsole: "+str); 
}
}

so müsstest du zumindest irgendeine Ausgabe bekommen,
ansonsten wird der entsprechende Code gar nicht ausgeführt


----------



## Guest (30. Jun 2008)

Ich erhalte hier folgende Ausgabe:

InputStream der Konsole: Microsoft Windows XP [Version 5.1.2600]
InputStream der Konsole: (C) Copyright 1985-2001 Microsoft Corp.
InputStream der Konsole: 

Anscheinend wird die Kommandokonsole gestartet. Jediglich die Ausführung des Skripts wird nicht durchgeführt.


----------



## SlaterB (30. Jun 2008)

teste auch
proc.getErrorStream()

vielleicht läuft dein Skript nicht so wie du dachtest


----------



## Guest (30. Jun 2008)

Um ganz sicher zu gehen lasse ich mir nicht nur den InputStream, sondern auch den ErrorStream ausgeben.

Der Code:

```
public void fuehreProgrammAus(String festplatte, String pfad) {
		try {
			String cmdstart[] = { "cmd.exe", festplatte, "start", pfad};
			Process proc = new ProcessBuilder("cmd.exe", "start", festplatte, pfad).start();
			 // Ab hier sind eigentlich nur Ausgaben, die für den Programmierer nützlich sein könnten, 
		      // bei möglichen Fehlern bzw. Erfolgen 
		      BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
		      BufferedReader er = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
		      String konsolenString = null; 
		      while ((konsolenString = br.readLine()) != null) { 
		    	  System.out.println("InputStream der Konsole: "+konsolenString); 
		      }
		      System.out.println("Bla");
		      while ((konsolenString = er.readLine()) != null) { 
		    	  System.out.println("Fehler der Konsole: "+konsolenString); 
		      }
			
		} catch (IOException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}

	}
```

Ich erhalte noch immer dieselbe Ausgabe. Nicht einmal das "Bla" erscheint. Keine Fehlermeldung oder sonstiges... Sehr merkwürdig....


----------



## SlaterB (30. Jun 2008)

>  Nicht einmal das "Bla" erscheint

dann ist br noch nicht beendet und wartet auf irgendwas,
solange blockiert auch das Programm,

teste nochmal nur die Error-Ausgabe


----------



## Guest (30. Jun 2008)

Nur das "Bla" erscheint, keine Fehlermeldung.  ???:L


----------

