Как выполнить системные команды (linux/bsd) с помощью Java
Я пытаюсь быть дешевым и выполнять локальную системную команду (uname -a
) в Java. Я хочу захватить вывод из uname
и сохранить его в строке. Каков наилучший способ сделать это? Текущий код:
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.");
}
}
Ответы
Ответ 1
Ваш путь не за горами, что я бы сделал:
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();
Обращайтесь с любыми исключениями, которые вам нравятся, конечно.
Ответ 2
Это лучший способ сделать это.
Также вы можете использовать ProcessBuilder, у которого есть конструктор переменных аргументов, поэтому вы можете сохранить строку или два кода
Ответ 3
То, что вы делаете, выглядит отлично. Если ваша команда возвращает только одну строку, вам не нужен цикл while, просто сохраните значение reader.readLine() в одной переменной String.
Кроме того, вы, вероятно, должны что-то делать с этими исключениями, а не просто глотать их.
Ответ 4
Я знаю, что это очень старый, но все же...
Читайте статью здесь:
http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html
Я понимаю, что вы должны сначала прочитать выходные и потоки ошибок вашей исполняемой команды, и только тогда waitFor
возвращаемое значение вашего процесса.