java runtime.getRuntime.exec( cmd ) mit long-Parametern
Ich mache ein frontend für eine command line app. Es hat eine sehr lange Kommandozeile ist etwas simliar auf diese:
public String liveShellCommand(){
String cmd="command mode --parameter arg --parameter2 arg2 --parameter3 arg3";
Runtime run = Runtime.getRuntime() ;
Process pr ;
try {
log.progress("sending command: " +cmd);
pr = run.exec( cmd );
pr.waitFor() ;
Alles scheint zu funktionieren, bis ich die "mode" - Schalter hinein. Die "mode" - Schalter führt Sie von der Befehlszeile aus. Ich habe versucht ein paar Kombinationen, die Aufteilung der Parameter in ein array, welches nicht durchführen. Ich denke es hat etwas zu tun mit "Modus" nicht mit einem -- vor, und es kann nicht ein -- davor.
Was mache ich falsch?
edit: ich vergaß zu erwähnen, dass alle, die ich sehen kann, ist diese: Debugger angehalten, auf uncompilable source code. Ich bin mit netbeans und es scheint sich nicht um print out ein stack-trace. Es Stoppt auf der Flucht.exec(cmd). Gibt es etwas falsch mit java?
Konnte ich den ProcessBuilder um es zu starten, ohne einfach nur versagt...
Analysiert "Befehl" ganz gut, aber wenn ich "Befehl-Modus"
java.io.IOException: Cannot run program "command mode": java.io.IOException: error=2, No such file or directory
Also kann es nicht analysieren, denke ich.
- Java sollte nicht egal, wenn der Befehl, den Sie ausgeführt hat -- vor seiner Parameter oder nicht - es ist nur die Ausführung des Befehls in der shell, wie Sie Sie angeben. Könnte es sein, dass es etwas mit diesem "Befehl" erfordert in Ihrer Umgebung, die nicht immer gezogen, weil der Weg von java ausgeführt wird shell?
- Es nimmt.. ich erfuhr das, als ich versucht habe "gksudo myCommand parameter" Es wird jeder Raum in seinem eigenen Angebot. die gksudo Beispiel zeigt, wie 3 getrennte Befehle. Nicht die exec ausführen des Befehls auf dem system?
- Nicht genau. Ich bin mir nicht sicher, also nicht daneben mein Kommentar unten, wenn ich falsch bin, aber vielleicht versuchen Sie entkommen den Raum mit \
- das funktioniert entweder nicht.
- Yep, ich hätte meine due diligence vor dem posten mein Kommentar. Wie Sie sagen, es wird jeder parameter durch ein Leerzeichen getrennt in eigenen string. Haben Sie versucht, ein array aus den Parametern und der übergabe an die überladene exec aufrufen? Auch, ich habe gesehen, eine Menge von Erwähnung der ProcessBuilder Klasse - vielleicht würde dir helfen (wenn du mit Java 1.5+).
- Ich eigentlich nur verbrachte die Letzte Stunde lernen und über den Prozess-generator. Es bringt mich weiter. aber keine Zigarre... danke.. ich aktualisiert die erste post.. ich war in der Lage, eine Fehlermeldung erhalten, mindestens.
Du musst angemeldet sein, um einen Kommentar abzugeben.
+1 für das senden der Argumente durch die als array.
Versenden alles als ein string kann die Arbeit auf einigen Systemen, aber nicht auf andere.
Ich weiß, Sie haben gesagt, dass Sie versucht, den Versand der Argumente, durch die ein array von Zeichenfolgen ohne Erfolg, doch wurden Sie empfangen eine andere Art von Fehler? Wenn das andere Programm hat ein Protokoll, möchten Sie vielleicht, um zu sehen, was schief läuft. Sie schreiben, könnte ein einfaches Skript, das-und Ausgänge mit den Parametern es aufgerufen wurde, mit zu testen, was tatsächlich kommen durch.
Verwenden ProcessBuilder und übergeben Sie String[]
einem Array war die Antwort. Ich habe auch eine ArrayList, weil die Komplexität der Befehle. Anyways... Definiert arraylist Hinzugefügt-Befehle konvertiert array, angezeigt array gesendeten Befehle.. Alles gut geklappt. Jeder Parameter muss in einem eigenen String in das array.