使用sudo命令从Java Projects安装软件

时间:2014-03-29 12:34:34

标签: java command install gksudo

我想要实现的是从我的Java应用程序安装软件     创建。我得到了gksudo的许可。然后,我键入了我的通行证,程序启动了     工作到是/没有选项出现。我怎么能传递这个问题?

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 个答案:

答案 0 :(得分:0)

简单 - 有点特别 - 解决方案:不要执行“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());