2014-12-27 3 views
0

curl 명령을 Java를 통해 프로세스로 실행하려고합니다. 내가 그것을 실행할 때 나는 결과물을 전혀 얻지 못하고있다. 커맨드 라인을 통해 같은 명령을 실행할 때 올바른 출력을 얻고 있습니다. URL은 출력을 XML로 리턴합니다.Java runtime.getruntime()에 출력이 없습니다.

다음은 Java 프로그램 용 코드입니다. 여기

public static void exec(){ 
     try { 
      Process p = Runtime.getRuntime().exec(new String[]{"curl", "http://genome.ucsc.edu/cgi-bin/das/mm9/dna\\?segment\\=chr1:3206424,3206499"}); 
      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line=null; 
      while((line=input.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

나는 다음과 같은 문자열 배열 {"ls", "-al"}를 사용하여 Java 프로그램을 실행할 때 그것은 나에게 예상되는 출력을 제공 내가 명령 줄

curl http://genome.ucsc.edu/cgi-bin/das/mm9/dna\?segment\=chr1:3206424,3206499 

를 통해 실행하고있는 명령입니다

내가 감사하겠습니다 어떤 도움.

+1

프로세스의 출력 스트림을 버퍼링 된 판독기에 바인딩해야합니다. 입력 스트림이 아닙니다. –

답변

1

Process이 완료 될 때까지 기다리는 중입니다. 또한, 다른 Thread 필요 했어, 아래에 코멘트에서

ProcessBuilder pb = new ProcessBuilder("curl", 
     "http://genome.ucsc.edu/cgi-bin/das/mm9/dna?" 
     + "segment=chr1:3206424,3206499"); 
pb.inheritIO(); 
try { 
    Process p = pb.start(); 
    p.waitFor(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

편집

처럼 ProcessBuilderinheritIO()를 사용할 수 있습니다. 예 :

static class InputStreamReaderRunnable implements Runnable { 
    private StringBuilder sb; 
    private InputStream is; 

    public InputStreamReaderRunnable(InputStream is) { 
     this.is = is; 
     this.sb = new StringBuilder(); 
    } 

    @Override 
    public void run() { 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     try { 
      while ((line = br.readLine()) != null) { 
       sb.append(line).append(System.lineSeparator()); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public String toString() { 
     return sb.toString(); 
    } 
} 

public static void main(String[] args) { 
    ProcessBuilder pb = new ProcessBuilder("curl", 
      "http://genome.ucsc.edu/cgi-bin/das/mm9/dna?segment=chr1:3206424,3206499"); 
    try { 
     Process p = pb.start(); 
     InputStreamReaderRunnable isrr = new InputStreamReaderRunnable(
       p.getInputStream()); 
     Thread t = new Thread(isrr); 
     t.start(); 
     p.waitFor(); 
     t.join(); 
     String out = isrr.toString(); 
     System.out.println(out); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

여전히 출력이 없습니다. – AndroidDev93

+0

@ AndroidDev93 답안에서했던 것처럼 URL을 수정하십시오. 나는 방금 도망 갔다. (그리고 형제 * 나는 결과를 얻는다. 나는 그것을 이해하지 못한다. 그러나 나는 그것을 얻는다). –

+0

아, 네가 맞아! 그러나 자동으로 명령 행에 인쇄됩니다. 출력을 String에 저장할 수 없습니다. 그걸 어떻게하는 지 아는가? – AndroidDev93

관련 문제