2013-06-17 19 views
10

Mam polecenie, które trzeba uruchomić w Javie wzdłuż tych linii:Having przestrzenie w Runtime.getRuntime() exec 2 wykonywalnych

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

Polecenie to działa dobrze, gdy ścieżka nie ma miejsca, ale kiedy mam przestrzenie, wydaje mi się, że to nie działa. Próbowałem następujące rzeczy, bieganie 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); 

jak również

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); 

Ale nie wydaje się być cokolwiek. Jakieś myśli o tym, co robię źle?

+0

Jako ogólna rada: Odczyt (i implementacja) * wszystkie * zalecenia [Kiedy Runtime.exec() nie będzie] (http: //www.javaworl d.com/jw-12-2000/jw-1229-traps.html). To może rozwiązać problem. Jeśli nie, powinien podać więcej informacji na temat przyczyny niepowodzenia. Następnie zignoruj, że odwołuje się do 'exec' i zbuduj' Process' używając 'ProcessBuilder'. Przerwij także 'String arg' na' String [] args', aby uwzględnić argumenty, które same zawierają spacje. –

Odpowiedz

16

Każdy argument przekazywany do polecenia powinien być oddzielnym elementem String.

więc tablica polecenie powinno wyglądać bardziej jak ...

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

Każdy element pojawi się jako pojedynczego elementu w programach args zmiennych

Chciałbym również, znacznie, zachęcamy do korzystania z ProcessBuilder zamiast tego, ponieważ jest to łatwiejsze do skonfigurowania i nie wymaga zawijania niektórych poleceń w "\"...\""