2012-09-11 16 views
5

Di solito uso java.lang.ProcessBuilder e java.lang.Process per eseguire programmi da riga di comando esterni e funziona correttamente per i comandi eseguiti correttamente. Ad esempio, ciò sarebbe "myProgram" con l'argomento "myArg" nella directory di lavoro:eseguire un'applicazione da riga di comando interattiva da java

List<String> commandLine = new ArrayList<String>(); 
commandLine.add("myProgram"); 
commandLine.add("myArg"); 
ProcessBuilder builder = new ProcessBuilder(commandLine); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 

Tuttavia, dire che volevo eseguire uno script o un programma o qualcosa che ha avuto input interattivo (me è richiesto di più input dopo l'avvio). Posso farlo in Java con codice simile a quello sopra, o ho bisogno di un approccio diverso? O c'è qualche biblioteca che può aiutarmi con questo?

risposta

4

In base a the documentation si dovrebbe essere in grado di reindirizzare i flussi di input e output. Questo dice di usare il System.in/System.out dal processo padre:

builder.redirectInput(ProcessBuilder.Redirect.INHERIT); 
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

Se si desidera scrivere cose da ingresso del processo:

Se la fonte è Redirect.PIPE (il valore iniziale) , quindi è possibile scrivere l'input standard di un sottoprocesso utilizzando il flusso di output restituito da Process.getOutputStream(). Se l'origine è impostata su qualsiasi altro valore, Process.getOutputStream() restituirà un flusso di output null.

+0

con stdin e stdout vuoi dire System.in e System.out? – 11684

+0

@ 11684 Sì, ho aggiornato la risposta. –

+0

Grazie! Sono stato alla ricerca di questo per un bel po '. – dantiston

0

Il reindirizzamento di stdin e stdout è sicuramente un'opzione per semplici programmi da riga di comando.

Utilizzo di una classe di "robot" è un altro, se hai veramente bisogno di tasti di script (ad esempio, in uno script di test):

Scrittura di un semplice file .bat o script di shell, che chiama il tuo programma Java e usa "<" e ">" gli operatori di reindirizzamento è ancora un terza opzione.

tutto dipende esattamente quello che stai cercando :)

+0

Fondamentalmente voglio forzare le richieste di conferma per un programma che non ha un flag --force o equivalente. – smcg

+0

Puoi eseguire il programma in uno script di shell? Se "sì", sarebbe sufficiente? – paulsm4

+0

sarebbe un kludge. – smcg

Problemi correlati