2013-05-22 16 views
5

Ho bisogno di eseguire un comando nel mio programma java ma dopo aver eseguito il comando, ha richiesto un altro parametro (una password nel mio caso). come posso gestire il processo di output di Runtime.getRuntime().exec() per accettare parametri per ulteriori esecuzioni?Invia parametro a Runtime.getRuntime(). Exec() After Execution

Ho provato new BufferedWriter(new OutputStreamWriter(signingProcess.getOutputStream())).write("123456"); ma non ha funzionato.

+0

ho provato nuovo BufferedWriter (nuova OutputStreamWriter (signingProcess.getOutputStream())). Write ("123456"), ma non ha funzionato. –

risposta

5

Il vostro programma non dispongono di un'opzione --password? Normalmente tutti i programmi basati su riga di comando, principalmente per gli script.

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

O il modo più complicato e molto più incline all'errore:

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 
} 

Questo esempio apre un nuovo thread (tenere a mente concorrenza e sincronizzazione) che sta andando a leggere l'output del processo. Simile è possibile alimentare il processo con input finché non è terminato:

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

Spero che questo aiuti.

+0

sì hai ragione, l'ho completamente dimenticato :)) –

+0

Ma se c'è un'altra opzione dopo l'esecuzione sarei più soddisfatto: D –

+1

certo, c'è un modo più complicato per farlo dopo l'escissione -> Ho intenzione di estendere la mia risposta. – salocinx

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

provare in questo modo

Problemi correlati