2014-03-29 5 views
0

Java 응용 프로그램에서 소프트웨어를 설치하려면
을 작성하십시오. 국선도에서 허가를 받았습니다. 그런 다음 패스를 입력하고 예/아니요 옵션이 나타날 때까지 이 시작되었습니다. 이 질문에 어떻게 대답 할 수 있습니까?Java 프로젝트에서 sudo 명령을 사용하여 소프트웨어 설치

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

    } 

답변

0

쉬운 - 다소 특수 - 솔루션 :하지 말자 간부 "apt-get을 ... 설치"하지만 "apt-get을 -y 설치 ...". 그러면 확인을위한 질문이 표시되지 않습니다.

보다 일반적인 접근 방식 : Runtime.exec()는 프로세스 인스턴스를 생성합니다. 코드에서 수행하는 작업은 "apt-get"및 "y"두 가지 프로세스를 작성하는 것입니다. 당신이해야 할 일은 : 하나의 프로세스 인스턴스를 생성하고이 프로세스의 입력 채널에 문자 "y"를 입력하십시오. 이것은 (이미했던 것처럼) 프로세스를 생성하고 입력에 대한 참조를 모으고 "y \ n"을이 입력으로 보내면됩니다.

입력은 프로세스의 입력에 연결된 OutputStream을 제공하는 Process.getOutput()을 호출하여 요청됩니다. 같은에서

이 모든 결과 :

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

너무 감사합니다. – user3142980

+0

gksudo와 함께 apt-get를 제대로 사용할 수 없다는 것을 깨달았습니다. apt-get은 CLI 도구이기 때문에 GUI 환경 (gksudo)에서는 사용할 수 없습니다. 그래서 sudo를 apt-get와 함께 사용해야한다. 하지만 자바 프로그램에서 sudo 명령을 실행할 수 없습니다. – user3142980

+0

Runtime.exec()는 일반적으로 연관된 tty가없는 프로세스를 생성하므로 sudo는 암호 쿼리를 출력 할 수 없습니다. "sudo -A ...."를 실행하여 sudo가 암호를 수집하기 시작할 수있는 프로그램을 활성화 할 수 있어야합니다. – blafasel