2013-06-17 6 views
10

Ich habe einen Befehl, den ich in dieser Richtung in Java ausgeführt werden müssen:Mit Leerzeichen in Runtime.getRuntime() exec mit 2 Executables

C:\path\that has\spaces\plink -arg1 foo -arg2 bar "path/on/remote/machine/iperf -arg3 hello -arg4 world" 

Dieser Befehl funktioniert gut, wenn der Pfad keine Leerzeichen enthält, aber Wenn ich die Räume habe, scheint es nicht zu funktionieren. Ich habe folgende Dinge versucht, die Ausführung von Java 1,7

String[] a = "C:\path\that has\spaces\plink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf -arg3 hello -arg4 world" 
Runtime.getRuntime().exec(a); 

sowie

String[] a = "C:\path\that has\spaces\plink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf", "-arg3 hello", "-arg4 world" 
Runtime.getRuntime().exec(a); 

Aber weder scheinen etwas zu tun werden. Irgendwelche Gedanken darüber, was ich falsch mache ??

+0

nicht umbrechen Als allgemeinen Hinweis: Lesen Sie (und implementieren) * alle * die Empfehlungen von [Wenn Runtime.exec() nicht] (http: //www.javaworl d.com/jw-12-2000/jw-1229-traps.html). Das könnte das Problem lösen. Wenn nicht, sollte es mehr Informationen über den Grund liefern, warum es fehlgeschlagen ist. Dann ignoriere, dass es sich auf 'exec' bezieht und baue den' Process' mit einem 'ProcessBuilder' auf. Zerlegen Sie auch einen 'String arg' in' String [] args', um Argumente zu berücksichtigen, die selbst Leerzeichen enthalten. –

Antwort

16

Jedes Argument, das Sie an den Befehl übergeben, sollte ein separates String-Element sein.

So sollten Sie Befehl Array aussehen wie ...

String[] a = new String[] { 
    "C:\path\that has\spaces\plink", 
    "-arg1", 
    "foo", 
    "-arg2", 
    "bar", 
    "path/on/remote/machine/iperf -arg3 hello -arg4 world"}; 

Jedes Element nun als Einzelelement in den Programmen args Variable

Ich würde auch stark, erscheinen wird, ermutigen Sie zu verwenden ProcessBuilder stattdessen, wie es einfacher zu konfigurieren ist und müssen Sie einige Befehle in "\"...\""