2015-04-05 2 views
0

У меня есть команда, которая не работает при вводе в терминал, хотя я хотел бы выполнить ее из java-программы.
Я использую этот код, где «homedir» был найден при вводе в терминал which spark.Команда выполнения Java в OSX

String homedir = "/usr/local/bin/spark"; 
File wd = new File(homedir); 
Process pwd = Runtime.getRuntime().exec("spark", null, wd); 

Когда я запускаю код, хотя я все еще получаю ошибку: Cannot run program "spark" (in directory "/usr/local/bin"): error=2, No such file or directory

Что я отсутствующий что мешает это работать?

ответ

0

Запустите ls -lah /usr/local/bin/spark, и вы обнаружите, что это символическая ссылка, указывающая в другом месте. Если это так, вам нужно указать это как рабочий каталог. Вы можете получить этот путь и на Java, указав wd.getCanonicalPath().

В качестве альтернативы, используйте Process pwd = Runtime.getRuntime().exec("/usr/local/bin/spark/spark");, если это опция.

Таким образом, чтобы задать аргумент можно сказать: Runtime.getRuntime().exec("/usr/local/bin/spark/spark list");

Чтобы прочитать результат обратно, использовать что-то вроде: Вы можете просто сказать .exec("/usr/local/bin/spark/spark"); Чтобы получить результат, просто использовать что-то вроде:

BufferedReader reader = new BufferedReader(new InputStreamReader(
     pwd.getInputStream())); 
StringBuilder sb = new StringBuilder(); 
String line = ""; 
while ((line = reader.readLine()) != null) { 
    sb.append(line + "\n"); 
} 

System.out.println(sb.toString()); 
+0

Использование '.exec ("/usr/local/bin/spark/spark ");' похоже, удаляет ошибку, но ничего не возвращает. Как я могу отправить в разные строки с этим? Например, «список искры» или «искровой вызов ...». Запуск 'ls -lah/usr/local/bin/spark' дает мне новый путь'/usr/local/bin/spark -> ../ lib/node_modules/spark-cli/bin/spark.js'. Хотя изменение этого каталога также дает мне ту же самую старую ошибку. –

+0

@StudBeefpile Я обновил свой ответ, чтобы иметь более подробную информацию. Надеюсь, это прояснит ситуацию. – Hendrikvh

+0

Так что попытка 'wd.getCanonicalPath()', похоже, не отличается от моего пути. Я не уверен, правильно ли я использую его: 'wd.getCanonicalPath();' Я также попытался: 'File path = new File (wd.getCanonicalPath()); ' Для запуска запуска'. exec ("/ usr/local/bin/spark/spark"); 'Я возвращаюсь:' Не удается запустить программу '/ usr/local/bin/spark/spark ": error = 20, Not a directory'. Я полностью в тупике. –

Смежные вопросы