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

Вот команда, я уверен, выполнение через командную строку

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

При запуске программы Java с помощью следующей строки массива {"ls", "-al"} это дает мне ожидаемый результат

Я был бы признателен любая помощь.

+1

вам необходимо привязать процесс вывода к буферизованному считывателю. Не его входной поток –

ответ

1

Вас не приглашает Process. Кроме того, вы можете использовать ProcessBuilder и inheritIO() как

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

Edit

Из вашего комментария ниже, вам потребуется еще Thread. Что-то вроде,

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

Смежные вопросы