Как выполнить системные команды (linux / bsd) с помощью Java
Я пытаюсь быть дешевым и выполнять локальную системную команду ( uname -a
) в Java. Я хочу захватить вывод из uname
и сохранить его в String. Каков наилучший способ сделать это? Текущий код:
public class lame { public static void main(String args[]) { try { Process p = Runtime.getRuntime().exec("uname -a"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line=reader.readLine(); while (line != null) { System.out.println(line); line = reader.readLine(); } } catch(IOException e1) {} catch(InterruptedException e2) {} System.out.println("finished."); } }
- Печать в новой строке, java
- Производительность математических математических библиотек Java?
- AbstractMethodError с использованием UriBuilder на JAX-RS
- Как проверить, является ли String числовым в Java
- Hibernate: другой объект с тем же значением идентификатора уже был связан с сеансом
- Доступ к свойствам maven, определенным в pom
- Как решить «не удалось лениво инициализировать сборку роли» Исключение Hibernate
- Почему кеш-код hashCode () не указан 0?
- Кодировка символов JSON
- Есть ли проверенное решение mouseOver для FirefoxDriver в Selenium2?
- Интеграция Java-R?
- Песочница против вредоносного кода в приложении Java
- Java: Обоснование интерфейса Cloneable
Ваш путь не за горами, что я, вероятно, сделаю:
Runtime r = Runtime.getRuntime(); Process p = r.exec("uname -a"); p.waitFor(); BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = ""; while ((line = b.readLine()) != null) { System.out.println(line); } b.close();
Разумеется, обращайтесь с любыми исключениями, которые вам нужны.
Это лучший способ сделать это. Также вы можете использовать ProcessBuilder, у которого есть конструктор переменных аргументов, поэтому вы можете сохранить строку или два кода
То, что вы делаете, выглядит великолепно. Если ваша команда возвращает только одну строку, вам не нужен цикл while, просто сохраните значение reader.readLine () в одной переменной String.
Кроме того, вы, вероятно, должны что-то делать с этими исключениями, а не просто глотать их.
Я знаю, что это очень старый, но все же …
Чтение статьи здесь: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec—won-t.html
Я понимаю, что сначала вы должны прочитать streamи вывода и ошибок вашей исполняемой команды и только потом waitFor
для возвращаемого значения вашего процесса.