Подтвердить что ты не робот

Как выполнить системные команды (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.");
    }
}
4b9b3361

Ответ 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 возвращаемое значение вашего процесса.