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

Собирать вывод команды Linux

Теперь я на Linux-машине. У меня есть программа Java, которая будет запускать некоторую команду linux, например ps, top, list или free -m.

Способ запуска команды в Java выглядит следующим образом:

Process p = Runtime.getRuntime().exec("free -m");

Как я могу собрать вывод с помощью программы Java? Мне нужно обработать данные на выходе.

4b9b3361

Ответ 1

Используйте Process.getInputStream(), чтобы получить InputStream, который представляет собой стандартный вывод вновь созданного процесса.

Обратите внимание, что запуск/запуск внешних процессов с Java может быть очень сложным и имеет довольно много ошибок.

Они описаны в этой замечательной статье, в которой также описываются пути вокруг них.

Ответ 2

Чтобы собрать результат, вы можете сделать что-то вроде

 Process p = Runtime.getRuntime().exec("my terminal command");

  p.waitFor();
  BufferedReader buf = new BufferedReader(new InputStreamReader(
          p.getInputStream()));
  String line = "";
  String output = "";

  while ((line = buf.readLine()) != null) {
    output += line + "\n";
  }

  System.out.println(output);

Это запустит ваш script, а затем соберет вывод из script в переменную. У ссылки в комментарии Йоахима Зауэра есть дополнительные примеры этого.

Ответ 3

Как для некоторой команды нужно подождать некоторое время, добавьте p.waitFor(); при необходимости.

public static void main(String[] args) {

        CommandLineHelper obj = new CommandLineHelper();
        String domainName = "google.com";
        //in mac oxs
        String command = "ping -c 3 " + domainName;
        String output = obj.executeCommand(command);
        System.out.println(output);

    }

private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {

            p = Runtime.getRuntime().exec(command);

            p.waitFor();
            BufferedReader reader = 
                            new BufferedReader(new InputStreamReader(p.getInputStream()));

                        String line = "";           
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

    }

Ответ 4

В частности, задействованы технические возможности вызова внешнего процесса. Библиотека jproc помогает абстрагироваться от них, автоматически потребляя результат команды и предоставляя результат в виде строки. Пример выше будет написан следующим образом:

String result = ProcBuilder.run("free", "-m");

Он также позволяет установить тайм-аут, чтобы ваше приложение не блокировалось внешней командой, которая не заканчивается.