Moin ;-) Andre, hi List, Jubel! Genau daran lag es! :-) Jetzt habe ich es hinbekommen mit dem Ausführen. Es lag an den Shell-Befehlen. Nachdem ich so wie Du geschrieben hast /bin/sh -c davor gestellt habe hat es funktioniert. :-) Also die Ausgabe in Java umzuleiten ist kein Problem ... falls es Dich interessiert habe ich es hier aufgeschrieben: try { String comand = "ls -lh"; Process proc = Runtime.getRuntime().exec(comand); Reader inReader = new InputStreamReader(proc.getInputStream()); int ch; while((ch = inReader.read()) != -1) System.out.println(ch); } catch (Exception ex) { ex.printStackTrace(); } So müsste es funktionieren ... denn so funktioniert es auch bei mir ;-) ... wenn Du den Error-Stream haben willst, dann musst Du proc.getErrorStream() anstatt proc.getInputStream() ... Also Java programmiere ich nur, da unsere Profs an der Uni-Mannheim so toll finden und Klausuren drüber schreiben ... daher bin ich jetzt wieder am Java Programmieren ... aber da Du wohl gut C++ programmierst hätte ich da mal eine Frage ... wie kann ich denn in einem C++ Programm wenn ich ein fork und exec ausgeführt habe die Ausgaben lesen ... also praktisch das was oben in Java steht ... könntest Du (oder jemand anderes der C++ kann) mir da ein kleines Beispiel geben? Wäre klasse, da ich da schon einige male davor stand ... Merci und tia OLI Am Mi, 2003-11-19 um 19.51 schrieb Andre Heine:
Moin moin,
Am Wednesday 19 November 2003 18:06 schrieb Tim Oliver Wagner:
ich versuche jetzt schon seit 24 Stunden folgendes hin zu bekommen. Bitte helfe mir doch mal einer ...
So gut es geht mit Java ...
[...]
Deinen Code kann ich nicht genau nachvollziehen, aber in meinen kleinen Test habe ich ähnliche Probleme.
comand = "ls -lA" funktioniert.
comand = "find / -name '*etc*' -print" funktioniert nicht wirklich, ich höre wie meine HDD losrattert! Nur komme ich nicht an die Ausgabe ...
Auf der Konsole funzt der find Befehl...
Also der 1. Befehl funktioniert (mkfifo). Aber beim zweiten funktioniert es nicht. Wie Ihr oben seht, geben ich den Befehl der dort ausgeführt werden soll auf der Kommandozeile aus. Wenn ich genau dieses in die Shell einfüge, dann wird er richtig ausgeführt. Jedoch im Programm leider nicht :-(.
Warum??
Das willst Du bestimmt nicht wissen *SCNR*
Java ist Sucks!!!
Na gut, es gibt noch Hoffnung:
Schau mal diesen Link an: google -> de.comp.lang.java -> Runtime.getRuntime().exec() http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=ba63dde5.0304081024.3f200211%40posting.google.com&rnum=2&prev=/groups%3Fq%3D%2BRuntime.getRuntime().exec%2Bgroup:de.comp.lang.java%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26group%3Dde.comp.lang.java%26selm%3Dba63dde5.0304081024.3f200211%2540posting.google.com%26rnum%3D2
Der gute Mann meint, das eventuell noch zusätzlich "/bin/sh -c" ausgerufen werden muss ...
Bring aber bei meinen "find" auch nix!!! Ausser, das jetzt das java Programm durchläuft ...
Mit dem "String[]" funktioniert der ls Befehl auch nicht mehr *wunder*!
Sieht jemand von Euch den Fehler oder hat eine Idee? Denn ich habe keine Ahnung mehr woran es noch liegen könnte.
Ehrlich gesagt weiss ich keine Lösung, ausser vielleicht C/C++ lernen ...
de.comp.lang.java weiss da bestimmt mehr!!!
java version "1.4.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01) Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
------------ test.java ----------------------- import java.io.*;
public class test {
public static void main( String argv[] ){ // String comand = "ls -lA"; // String comand_find = "find / -name 'home' -print";
String[] comand_array = { "/bin/sh", " -c", "ls -lA" //"find /home -name 'voodoo' -print" };
try { Process proc_v1 = Runtime.getRuntime().exec(comand_array); proc_v1.waitFor(); BufferedReader in = new BufferedReader(new InputStreamReader(proc_v1.getInputStream())); String output; while( (output =in.readLine()) != null) { System.out.println("while loop " + output ); } } catch (Exception e) { System.out.println("Error: " + e.getMessage()); } } }
----------------------------------------------------------------------------
Ciao
Andre