Установка программного обеспечения из 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());
Другие вопросы по тегам