2012-09-11 36 views
5

Normalmente uso java.lang.ProcessBuilder y java.lang.Process para ejecutar programas de línea de comandos externos, y funciona bien para comandos de ejecución y ejecución. Por ejemplo, esto iría "MYPROGRAM" con el argumento "myArg" en el directorio de trabajo:ejecutar la aplicación de línea de comando interactiva desde 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(); 

Sin embargo, decir que quería ejecutar un script o programa o algo que tenía una entrada interactiva (que me llevó por más caracteres después de comenzar). ¿Puedo hacer eso en Java con un código similar al anterior, o necesito un enfoque diferente? ¿O hay alguna biblioteca que pueda ayudarme con esto?

Respuesta

4

Según the documentation debería poder redirigir los flujos de entrada y salida. Este le dice que use el System.in/System.out del proceso padre:

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

Si desea escribir cosas a la entrada de los procesos:

Si la fuente es Redirect.PIPE (el valor inicial) , entonces la entrada estándar de un subproceso se puede escribir utilizando la secuencia de salida devuelta por Process.getOutputStream(). Si la fuente se establece en cualquier otro valor, Process.getOutputStream() devolverá una secuencia de salida nula.

+0

con entrada y salida estándar quiere decir System.in y System.out? – 11684

+0

@ 11684 Sí, actualicé la respuesta. –

+0

¡Gracias! He estado buscando esto por bastante tiempo. – dantiston

0

Redireccionar stdin y stdout es sin duda una opción para programas simples de línea de comandos.

El uso de una clase de "robot" es otra, si realmente se necesita para las pulsaciones de teclado de script (por ejemplo, en una secuencia de comandos de prueba):

Escribir un archivo .bat o script de shell simple, que llame a su programa Java y utilice "<" y ">" los operadores de redirección es todavía un tercera opción.

todo depende de exactamente lo que está buscando :)

+0

Básicamente quiero forzar a través de confirmaciones para un programa que no tiene un indicador de fuerza o equivalente. – smcg

+0

¿Se puede ejecutar el programa en un script de shell? Si la respuesta es "sí", ¿sería suficiente? – paulsm4

+0

sería un kludge. – smcg

Cuestiones relacionadas