# ProcessBuilder



## nameac (10. Okt 2007)

hallo,

ich möchte über java ein externes programm starten (tshark).

das problem ist das ich mittels processBuilder, die cmd zwar öffnen kann und beliebig argumente mit übergeben kann, aber die argumente die mein process benötigt nicht mit übergeben werden können.

gibt es da ne möglichkeit direkt in das konsolenfenster zuschreiben das ja als externer task geöffnet wird....


----------



## madboy (10. Okt 2007)

Wie meinst das?
Du kannst beliebige Argumente übergeben aber die, die du brauchst net?
Warum kannst du die Argumente nicht übergeben?


----------



## nameac (11. Okt 2007)

wenn ich ein programm das über die kommandozeile gestartet wird starten will, dachte ich bisher mann müsste dafür die cmd vorher starten, das das nicht zwingend notwendig ist ist mir jetzt aufgefallen, wobei einem dann nur abgespeckte funktionalität zur verfügung steht.

->ich rufe cmd mit parametern auf->einer dieser parametr ist tshark, unsd jetzt weiß ich nicht we ich tshark parameter mit auf den weg geben soll...


----------



## JPKI (11. Okt 2007)

```
Runtime.getRuntime().exec("cmd /c tshark " + parameter1 + " " + parameter2 + " " + usw...);
```


----------



## nameac (11. Okt 2007)

kann man mit outputStream in das terminal direkt schreiben?
bzw. die konsole, mit diesem bsp war ich leider nicht erfolgreich.


```
l.add("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal");
	
	try{
		ProcessBuilder builder = new ProcessBuilder(l); 
	    Process p = builder.start(); 
	     DataOutputStream terminal = new DataOutputStream(p.getOutputStream());
	   terminal.writeChars("cd /Applications/eclipse/workspace/perfTool/progs/\n");
		//terminal.flush();
```


----------



## nameac (11. Okt 2007)

mittlerweile klappt es ein bisschen besser aber den prozess aus einem bash prozess heraus gestartet funktioniert in sofern nicht, da die out.txt leer bleib und wenn ich p.waitFor setze passiert auch nicht mehr. 
wo liegt denn noch mein fehler?

```
l.add("/Applications/eclipse/workspace/perfTool/progs/bash");
	
		try{
		ProcessBuilder builder = new ProcessBuilder(l); 
	    Process p = builder.start(); 
	        	   
	DataOutputStream terminal = new DataOutputStream(p.getOutputStream());
	terminal.writeChars("cd /Applications/eclipse/workspace/perfTool/progs/\n");
	terminal.writeChars("tshark -c 10 >out.txt\n");
	//terminal.writeChars("exit\n");
	terminal.flush();
	//p.waitFor();
```


----------



## madboy (11. Okt 2007)

schau mal in den errorStream und inputStream (weiß grad nicht genau, wie die heißen) vom Prozess bzw. gib die aus. Vielleicht wird ja ne Fehlermeldung ausgegeben.


----------



## nameac (12. Okt 2007)

der ErrorStream liefert mir mein applicationsverzeichnis zur bash.

```
Scanner s = new Scanner( p.getErrorStream() ); 
	    System.out.println( s.next() );
```
im inputStream steht nichts.


----------



## madboy (12. Okt 2007)

```
ProcessBuilder builder = new ProcessBuilder("/bin/bash"); 
             Process p = builder.start(); 
                        
             DataOutputStream terminal = new DataOutputStream(p.getOutputStream()); 
             terminal.writeChars("cd /blablubb\n"); 
             terminal.writeChars("ls >out.txt\n"); 
             terminal.flush(); 
             Scanner s = new Scanner( p.getErrorStream() );
             while(s.hasNext()) { //das hier blockiert allerdings. Musst das Programm halt gewaltsam beenden ;-)
                 System.out.println(s.next());
             }
```

Das hört sich an, als wäre da der Fehler. Ich habs mal getestet (mit einem nicht vorhandenen Verzeichnis):

```
/bin/bash:
line
1:
cd:
/blablubb:
No
such
file
or
directory
```

Auch habe ich nachher eine Datei "out.txt" mit korrekter Ausgabe drinne.


----------

