Установка программного обеспечения из Java Projects с помощью команды sudo
Что я хотел бы добиться, это установить программное обеспечение из Java-приложения, которое я
создано. У меня есть разрешение с Гксудо. Затем я набрал свой пропуск и программа начала работать, пока не появилась опция да / нет. Как мне пройти этот вопрос?
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class TestApp {
public static void main(String[] args) {
Process ls = null;
BufferedReader input = null;
String line = null;
try {
ls = Runtime.getRuntime().exec(
new String[] { "gksudo", "apt-get", "install", "PACKAGE" });
try {
ls.wait(6000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ls = Runtime.getRuntime().exec(new String[] { "y" });
input = new BufferedReader(new InputStreamReader(
ls.getInputStream()));
} catch (IOException e1) {
e1.printStackTrace();
System.exit(1);
}
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
ls.destroy();
} catch (IOException e1) {
e1.printStackTrace();
System.exit(0);
}
}
}
1 ответ
Простое - несколько особенное - решение: не exec "apt-get install ...", а "apt-get -y install ...". Это подавит любые вопросы для подтверждения.
Более общий подход: Runtime.exec () создает экземпляр процесса. То, что вы делаете в своем коде, это создание двух процессов "apt-get" и "y". Что вам нужно сделать: создать один экземпляр процесса и ввести символ "y" во входной канал этого процесса. Это достигается путем создания процесса (как вы уже делаете), сбора ссылки на его входные данные и отправки "y\n" на этот вход.
Входные данные получаются путем вызова Process.getOutput(), который дает вам OutputStream, который связан с входом процесса.
Все это приводит к чему-то вроде:
ls = Runtime.getRuntime().exec(
new String[] { "gksudo", "apt-get", "install", "PACKAGE" });
ls.getOutput().write("y\n".getBytes());