使用sudo命令从Java项目安装软件



我想要实现的是从java应用程序安装一个软件,我
创建。我已经得到了gksudo的许可。然后,我输入通行证,程序就启动了工作直到出现yes/no选项。我怎样才能通过这道题?

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);
    }
  }
  }

简单-有些特殊-解决方案:不要执行"apt-get install…"而是"apt-get -y install…"。这将抑制任何需要确认的问题。

更通用的方法: Runtime.exec()创建一个流程实例。您在代码中所做的是创建两个进程"apt-get"one_answers"y"。您需要做的是:创建一个流程实例,并将字符"y"输入到该流程的输入通道中。这可以通过创建流程来实现(就像您已经做的那样),收集对其输入的引用,并将"yn"发送给该输入。

输入是通过调用process. getoutput()获得的,它会给你一个连接到流程输入的OutputStream。

这一切的结果是:

ls = Runtime.getRuntime().exec(
            new String[] { "gksudo", "apt-get", "install", "PACKAGE" });
ls.getOutput().write("yn".getBytes());

最新更新