Вызов Runtime.exec(String)
, где аргумент - это путь к исполняемому файлу "hostid", затем слить оба потока результирующего Process
объекта и взять содержимое стандартавыходной поток как строковое значение.
Этот простой класс демонстрирует, как вы могли бы реализовать эту стратегию (но нуждается в улучшении для обработки ошибок [например, stderr, исключения] и рекомендаций OOP [например, возвращая объект со свойствами bean,и т. д.]):
public class RunCommand {
public static String exec(String command) throws Exception {
Process p = Runtime.getRuntime().exec(command);
String stdout = drain(p.getInputStream());
String stderr = drain(p.getErrorStream());
return stdout; // TODO: return stderr also...
}
private static String drain(InputStream in) throws IOException {
int b = -1;
StringBuilder buf = new StringBuilder();
while ((b=in.read()) != -1) buf.append((char) b);
return buf.toString();
}
}
Ваша программа может использовать его следующим образом:
String myHostId = RunCommand.exec("/usr/bin/hostid").trim();
Обратите внимание, что для создания Process
используется ProcessBuilder
.может быть более подходящим, чем Runtime.exec()
, если вашей команде нужны аргументы или окружение и т. д.