[SP-pm] Automatizando consulta IBM com Perl ou Expect

Tiago Peczenyj tiago.peczenyj at gmail.com
Thu Mar 21 13:05:06 PDT 2013


e se vc fizer

"String(user1\n)\n"

resolve?

2013/3/21 Frederico Melo <fdmmelo at gmail.com>

> Olá Márcio, tudo bem?
>
> Voltei mestre! Bom, agora com um pouco mais de informação e bastante
> dúvida! Li os posts que você trocou com o Eden e, para minha tristeza, não
> encontrei ainda uma maneira de solucionar o meu problema. Mas, nem tudo
> está perdido pois estou no caminho certo!
>
> Segui seus exemplos e, fiz aqui no trabalho um debug no ambiente e notei
> algumas coisas:
>
> 1 - meu programa em Perl está funcionando ok e interagindo com o expect
> que, por sua vez dispara o s3270 (fiz um exemplo bem básico para logar no
> IBM e me retornar a tela de login);
> 2 - assim como seu exemplo, recebi todas as strings de conexão retornados
> pelo s3270, linhas no formato U F U C(192.164.123.130) I 4 24 80 15 28 0x0...
> OK! Muito interessante!
> 3 - passo os comandos do tipo:
>
>
> my $cmd1 = "connect(10.4.23.30:23)\n";
> $cmd1 .= "wait(InputField)\n";
> $cmd1 .= "String(user1)\n"; para usuário e o mesmo equivalente para senha
> $cmd1 .= "wait(InputField)\n";
> $cmd1 .= "String(password)\n";
> $cmd1 .= "Ascii(0,0,24,80)\n";
>
> Nesse ponto, notei que o s3270 não reconhece o "\n" como "enter"... no meu
> caso, diferente do seu, o usuário para o IBM não possui a quantidade máxima
> de caracteres para esse campo (geralmente 8). O usuário possui apenas 5
> caracteres e, preciso que seja enviado para o s3270 o "enter" para que ele
> passe para o outro campo de senha. Pelo output com a função ascii, notei no
> arquivo de log que, o campo user é preenchido utilizando o valor passado
> user1 e mais os próximos 3 caracteres do segundo comando string... fica
> algo assim:
>
> data:   Userid .............. user1pas      Voce e' responsavel pelos
> atos praticados
> data:   Senha ...............               com  o seu  codigo  de
> usuario, portanto
>
> E não há envio de "enter" !!! Tem alguma dica? Por favor Márcio, fico
> muito grato da sua ajuda e atenção!
>
> Abc aos Mestres!
> Frederico
>
>
>
> 2013/3/14 Frederico Melo <fdmmelo at gmail.com>
>
>> Márcio! Você tem toda razão! Realmente estou muito sobrecarregado mas,
>> estou em fase de finalização da outra demanda. Por incrível que pareça,
>> essa pequena ajuda que me deu no exemplo abaixo irá ajudar bastante! Vou
>> anotar aqui e acompanhar pela sua explicação. Tão logo finalize e coloque
>> em produção o outro sistema, irei me aprofundar com dedicação exclusiva
>> para a automação do IBM e, seu exemplo vai ajudar muito.
>>
>> Muito obrigado pela explicação de cada linha! Esclareceu bastante! Muito
>> obrigado e desculpe o incômodo! Com certeza, dentro em breve contatarei o
>> forum novamente e, se não se incomodar, vou lhe perguntar outras coisas
>> mas, preciso caminhar sozinho para ver as dúvidas!
>>
>> Muito obrigado Márcio!
>>
>> Abc,
>> Frederico
>>
>> 2013/3/13 Marcio - Google <marciorp at gmail.com>
>>
>>> Frederico,
>>>
>>>    Desculpe-me, mais se você não arrumar tempo para tentar e tentar, não
>>> vai evoluir mesmo. Isso que está fazendo é bem complicado mesmo, e não tem
>>> receita de bolo, pois quase ninguém usa, além do que como se trata de
>>> posicionamento de tela e tal, vária de ambiente para ambiente, não tenho
>>> como fazer por você.
>>>
>>>    Sobre o usuário e senha:
>>>   my $exp = Expect->spawn('s3270');        ##
>>>   my $cmd1 = "connect(10.1.8.192:23)\n";        ## Conectei no
>>> servidor, esse ai é o IP.
>>>   $cmd1 .= "wait(InputField)\n";        ## Aqui estou aguardando um
>>> campo de entrada, no meu caso o cursor já cai no campo do usuário
>>>   $cmd1 .= "String(usertest)\n";        ## Aqui eu "digito" na tela do
>>> terminal o nome do usuário, no meu caso é "usertest"
>>>   $cmd1 .= "wait(InputField)\n";        ## Aguardo o próximo campo de
>>> entrada, que no meu caso é a senha. Como no meu ambiente todos os usuário
>>> tem tamanho fixo e ocupam o campo todo, quando insiro o nome do usuário o
>>> cursor do terminal já cai para o próximo campo, que é a senha
>>>   $cmd1 .= "String(passtest)\n";        ## Digito a senha, que no meu
>>> caso é "passtest"
>>>   $cmd1 .= "Ascii(0,0,24,80)\n";        ## Leio a tela
>>>
>>>    Aquele código do histórico tem tudo que você precisa para fazer os
>>> primeiros e segundos testes. A documentação do s3270 tem os comando que
>>> você precisa para interagir com o terminal, isso não é Perl, é TN3270.
>>>    A explicação do Eden também vai ajudar muito a tratar as primeiras
>>> saídas.
>>>
>>>    Depois disso, poste as dificuldades, de preferência com o código que
>>> você usou e os erros ou dúvidas.
>>>
>>>
>>> [...]'s
>>>
>>> Marcio
>>>
>>> =begin disclaimer
>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>>
>>>
>>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130321/8a96dfd3/attachment.html>


More information about the SaoPaulo-pm mailing list