He utilizado la biblioteca Java ExpectJ para automatizar algunos trabajos en un servidor Linux, sin embargo, ahora necesito automatizar un trabajo que envíe una respuesta de texto diferente para cada ejecución. Aquí está el resultado:
Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012
********************************************************************************
********************************************************************************
[YOU HAVE NEW MAIL]
local-login [/home/user]%
Y en mi código tengo lo siguiente:
s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");
Recibo el resultado que se muestra, pero no pude enviar el siguiente comando porque no sé cómo leer la última respuesta, intenté usar una expresión regular pero no funciona.
Respuesta1
No es necesario manipular el texto del banner anterior. Expect esperará hasta que se cumpla una de las condiciones (como hacer coincidir una cadena/expresación regular o agotar el tiempo de espera). El texto anterior se almacena en buffer para un posible uso posterior, pero no forma parte de la coincidencia. Lo que debe manejar es buscar la cadena de mensaje: local-login [/home/user]%
. Si tiene una buena idea de cómo se verá (por ejemplo, siempre tendrá '[' directorio ']%', entonces puede escribir una expresión regular que coincida con eso:
.*\[(/[^/]+)+\]%
Asegúrese de no tener una nueva línea/retorno de carro en la expresión regular ya que la salida no tendrá uno.
Respuesta2
No creo que puedas usar expresiones regulares para hacer coincidiresperarj.
Parececomo si confiaran en String.indexOf
encontrar la pareja
if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)
¿Dónde pattern
se espera la cadena proporcionada?
Así que intente hacer coincidir una subcadena y vea si funciona mejor.