2013-05-22 12 views
5

Potrzebuję wykonać polecenie w moim programie java, ale po wykonaniu polecenia, wymagało to innego parametru (hasło w moim przypadku). jak mogę zarządzać procesem wyjściowym Runtime.getRuntime().exec(), aby zaakceptować parametr do dalszego wykonania?Wyślij parametr do Runtime.getRuntime(). Exec() po wykonaniu

Próbowałem new BufferedWriter(new OutputStreamWriter(signingProcess.getOutputStream())).write("123456");, ale to nie zadziałało.

+0

próbowałem nowy BufferedWriter (nowa OutputStreamWriter (signingProcess.getOutputStream())). Write ("123456"), ale nie działa. –

Odpowiedz

5

Czy Twój program nie posiadają opcję --password? Zwykle wszystkie programy działające w wierszu poleceń działają, głównie w przypadku skryptów.

Runtime.getRuntime().exec(new String[]{"your-program", "--password="+pwd, "some-more-options"}); 

lub bardziej skomplikowany sposób i znacznie bardziej podatne na błędy:

try { 
    final Process process = Runtime.getRuntime().exec(
      new String[] { "your-program", "some-more-parameters" }); 
    if (process != null) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        DataInputStream in = new DataInputStream(
          process.getInputStream()); 
        BufferedReader br = new BufferedReader(
          new InputStreamReader(in)); 
        String line; 
        while ((line = br.readLine()) != null) { 
         // handle input here ... -> 
         // if(line.equals("Enter Password:")) { ... } 
        } 
        in.close(); 
       } catch (Exception e) { 
        // handle exception here ... 
       } 
      } 
     }).start(); 
    } 
    process.waitFor(); 
    if (process.exitValue() == 0) { 
     // process exited ... 
    } else { 
     // process failed ... 
    } 
} catch (Exception ex) { 
    // handle exception 
} 

Próbka ta otwiera nowy wątek (należy pamiętać, współbieżności i synchronizacji), która będzie czytać wyjście procesu. Podobny proces można wprowadzić z wprowadzeniem tak długo, jak długo nie zakończył się:

if (process != null) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       DataOutputStream out = new DataOutputStream(
         process.getOutputStream()); 
       BufferedWriter bw = new BufferedWriter(
         new OutputStreamWriter(out)); 
       bw.write("feed your process with data ..."); 
       bw.write("feed your process with data ..."); 
       out.close(); 
      } catch (Exception e) { 
       // handle exception here ... 
      } 
     } 
    }).start(); 
} 

Mam nadzieję, że to pomoże.

+0

Tak, masz rację, zupełnie o tym zapomniałem :)) –

+0

Ale jeśli po wykonaniu czegoś jest jeszcze inna opcja, byłbym bardziej usatysfakcjonowany: D –

+1

z pewnością jest to bardziej skomplikowany sposób po wykonaniu egzekucji -> Mam zamiar przedłużyć moja odpowiedź. – salocinx

2
Runtime r=Runtime.getRuntime(); 
process p=r.exec("your string"); 

spróbować w ten sposób

Powiązane problemy