necesito para ejecutar desde Java un script por lotes, lo que trasJava: La detección de mensaje para el usuario cuando se ejecuta un script por lotes desde Java
1) Una vez que se inicia se lleva a cabo una tarea larga (hasta varios segundos).
2) A continuación, aparece el mensaje "Contraseña:".
3) Luego, el usuario ingresa la contraseña y presiona la tecla Enter.
4) Luego, la secuencia de comandos completa su trabajo.
Sé cómo iniciar el script desde Java, sé cómo leer el resultado del script por lotes en Java, pero no sé cómo esperar a que aparezca el mensaje de contraseña (cómo puedo saber que la secuencia de comandos por lotes está esperando la entrada de la contraseña).
Entonces, mi pregunta es: ¿cómo saber cuándo el script por lotes ha impreso el mensaje?
Por el momento, he siguiente código:
final Runtime runtime = Runtime.getRuntime();
final String command = ... ;
final Process proc = runtime.exec(command, null, this.parentDirectory);
final BufferedReader input = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
String line = null;
while ((line = input.readLine()) != null) {
LOGGER.debug("proc: " + line);
}
¿Estás seguro de que es getOutputStream()? Por el momento, puedo ver parte del resultado del script por lotes usando input.readLine() (vea la declaración de registro en mi fragmento de código). Pero no todo, no puedo detectar el mensaje de esta manera. –
mi primera respuesta fue una tontería. El javadoc explica el flujo de entrada y salida: http://download.oracle.com/javase/6/docs/api/java/lang/Process.html. – remipod
Gracias por su código. Desafortunadamente, el prompt de contraseña NO es terminado por una nueva línea. Es por eso que readline no funciona en este caso. –