Expressões regulares com ExpectJ

2

Eu tenho usado a biblioteca ExpectJ Java para automatizar algumas tarefas em um servidor Linux, mas agora preciso automatizar uma tarefa que envia uma resposta de texto diferente para cada execução. Aqui está a saída:

Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012 
********************************************************************************

********************************************************************************
[YOU HAVE NEW MAIL] 
local-login [/home/user]%

E no meu código eu tenho o seguinte:

s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");

Eu recebo a saída mostrada, mas não consegui enviar o próximo comando porque não sei como foi a última resposta, tentei usar uma expressão regular, mas não funciona.

    
por fers 31.03.2012 / 00:49

2 respostas

0

O texto do banner anterior não precisa ser tratado. Esperar vai esperar até que uma das condições seja satisfeita (como combinar uma string / regexp ou tempo limite). Texto antes de ser armazenado em buffer para possível uso posterior, mas não faz parte da correspondência. O que você precisa manipular está procurando a string de prompt: local-login [/home/user]% . Se você tem uma boa idéia de como ele pode ser (por exemplo, sempre terá '[' diretório ']%', então você pode escrever uma expressão regular para combinar com isso:

.*\[(/[^/]+)+\]%

Certifique-se de não ter um retorno de nova linha / carro na expressão regular, pois a saída não terá um.

    
por 01.04.2012 / 15:42
0

Eu não acho que você é capaz de usar expressões regulares para combinar em ExpectJ . Parece que eles estão confiando em String.indexOf para encontrar a correspondência

if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)

onde pattern é a string fornecida para esperar.

Portanto, tente corresponder em uma substring e veja se funciona melhor.

    
por 21.01.2013 / 11:32