Наличие пробелов во время выполнения.getRuntime ().exec с 2 исполняемыми файлами
У меня есть команда, которую я должен выполнить в java следующим образом:
C:paththat hasspacesplink -arg1 foo -arg2 bar "path/on/remote/machine/iperf -arg3 hello -arg4 world"
Эта команда прекрасно работает, когда путь не имеет пробелов, но когда у меня есть пробелы, я не могу заставить его работать. Я попробовал следующие вещи, запустив Java 1.7
String[] a = "C:paththat hasspacesplink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf -arg3 hello -arg4 world"
Runtime.getRuntime().exec(a);
А также
String[] a = "C:paththat hasspacesplink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf", "-arg3 hello", "-arg4 world"
Runtime.getRuntime().exec(a);
Но ни тот, ни другой, похоже, ничего не делают. Есть мысли о том, что я делаю неправильно??1 ответ:
Каждый аргумент, передаваемый команде, должен быть отдельным строковым элементом.
Таким образом, Вы командуете массивом, который должен выглядеть более похожим...
String[] a = new String[] { "C:\path\that has\spaces\plink", "-arg1", "foo", "-arg2", "bar", "path/on/remote/machine/iperf -arg3 hello -arg4 world"};
Каждый элемент теперь будет отображаться как отдельный элемент в переменной программы
args
Я бы также настоятельно рекомендовал вам использовать
ProcessBuilder
вместо этого, так как это проще настроить и не требует, чтобы вы обернули некоторые команды в"\"...\""