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

Marcio - Google marciorp at gmail.com
Tue Mar 12 08:44:29 PDT 2013


Você já usou aqueles códigos/exemplos?
Qual foi o resultado?
Em 12/03/2013 08:06, "Frederico Melo" <fdmmelo em gmail.com> escreveu:

> Thiago,
> O Márcio teve a mesma necessidade que eu tenho atualmente. Penso em
> desenvolver algo como ele pois, o acesso ao mainframe que possuo é através
> de aplicações como o QWS3270. Apesar do acesso ser via Telnet, o mainframe
> me retorna uma série de caracteres e menus onde navego através de teclas
> como PF1, PF2, etc... Minha necessidade é estabelecer a conexão, navegar no
> servidor e buscar alguns dados e armazená-los em banco. O servidor
> mainframe não retorna prompt para comandos. Toda navegação é feita através
> de menus pré-estabelecidos e teclas com funções associadas. A navegação
> deve ser feita (imagino), através de posicionamento de strings dentro da
> tela (ex.: posição para login->Userid  coluna 20, linha 160, campo com 8
> caracteres). Veja exemplo do print da tela do QWS3270:
>
>  EMXXYY
>  EEEEEEE  MM     MM  BBBBBBB   RRRRRRR    EEEEEEEE    SSSSSS      AAAAAAAA
>  EE       MMM   MMM  BB    BB  RR    RR   EE        SS      SS   AA      AA
>  EE       MM MMM MM  BB    BB  RR    RR   EE        SS           AA      AA
>  EEEEE    MM  M  MM  BBBBBB    RRRRRRR    EEEEEEEE    SSSSSS     AAAAAAAAAA
>  EE       MM     MM  BB        RR   RR    EE                SS   AA      AA
>  EE       MM     MM  BB        RR    RR   EE        SS      SS   AA      AA
>  EEEEEEE  MM     MM  BB        RR     RR  EEEEEEEE    SSSSSS     AA      AA
>
>
>   ACESSO AOS SERVICOS DO IBM                                Data....:
> 12.03.13
>                                                             Hora....:
> 08.50.59
>   Identifique-se fornecendo:                                Terminal:
> XXX393939
>
>   Userid ..............               Voce e' responsavel pelos atos
> praticados
>   Senha ...............               com  o seu  codigo  de usuario,
> portanto
>   Codigo do servico....               para a  sua seguranca,   NAO FORNECA
> SUA
>   Grupo ...............               SENHA PARA NINGUEM.
>   Nova Senha ..........
>
>   Atencao: Em caso de problema telefone para XXX DA SUA LOCALIDADE ou
>   PF 1=Help     (xxx)xxx ou 0800-xxx ( HELP-DESK )
>
>
> Márcio,
> Li alguns posts antigos onde você e Eden evoluíram muito sobre o expect, o
> s3270 e a manipulação dos dados. Sou muito cru no perl, no s3270 e no
> expect. Se você puder me passar o que você desenvolveu me ajudaria muito.
> Eu utilizaria como exemplo e tentaria customizar por aqui, dentro da minha
> necessidade.
>
> Estou realmente precisando de ajuda ainda mais por estar envolvido em
> outros projetos e com pouco tempo para pesquisa. Toda a ajuda de vocês é
> muito válida! Agradeço já!
>
> Abraços,
> Fred
>
>
> 2013/3/9 thiago glauco sanchez <thiagoglauco em ticursos.net>
>
>> Entendi. Dei uma pesquisada. De acordo com o IETF o TN3270 tem
>> diferenças do tty padrão:
>>
>> "3270 display terminal data differs from traditional display terminal
>>    data in that it is block mode and uses EBCDIC instead of ASCII
>>    character representation. These two differences are the primary
>>    reason for the differentiation of TN3270 from standard Telnet in this
>>    document."
>>
>> Então,
>> Expect->spawn('s3270' , @parameters) deve funcionar como no exemplo do
>> e-mail anterior.
>>
>> De qualquer forma acho que isso pode te ajudar:
>>
>>
>> http://www.linuxquestions.org/questions/linux-software-2/how-do-i-use-s3270-x3270-for-scripting-767067/
>>
>>
>> espero ter ajudado.
>> abraços
>> Thiago Glauco
>>
>> On Sat, 2013-03-09 at 16:38 -0400, Marcio - Google wrote:
>> > Thiago, o que estou te dizendo é que com cliente telnet comum você não
>> > conecta no mainframe, pelo menos eu não consegui. Por isso que fui
>> > atrás de outro cliente.
>> > Acho que o Eden sabe explicar o motivo.
>> >
>> > Em 09/03/2013 16:09, "thiago glauco sanchez"
>> > <thiagoglauco em ticursos.net> escreveu:
>> >         A interação humana no expect é usada por pattern match:
>> >
>> >             $exp->expect($timeout,
>> >                          [ timeout => \&report_timeout ],
>> >                          [ qr/pattern/ => \&handle_pattern],
>> >                         );
>> >
>> >         Ex:
>> >         #efetua login
>> >         my @parameters = ('host')
>> >         Expect->spawn('telenet' , @parameters)
>> >             $exp->expect($timeout,
>> >                 [ qr/username/ => sub { my $self = shift;
>> >                                         $self->send('usuario\n');
>> >                                         return 'exp_continue'}],
>> >                 [qr/password/ => sub { my $self = shift;
>> >                                         $self->send('password\n');
>> >                                         return 'exp_continue'} ],
>> >                 'bash$');
>> >
>> >
>> >         #agora você está no servidor e pode enviar comandos:
>> >         $exp->send("comando1\n")
>> >
>> >         #e definir ações conforme padrões de texto da saída do
>> >         comando.
>> >         $exp->expect($timeout,
>> >                 [ qr/pattern1/ => sub { my $self = shift;
>> >                                         ...ação 1
>> >                                         ...isso é uma sub.
>> >                                         ..você pode fazer qualquer
>> >         coisa aqui}],
>> >                 [qr/pattern2/ => sub { my $self = shift;
>> >                                         ...ação 2} ],
>> >                 'bash$');
>> >         #e fazer o mesmo para n comandos.
>> >         $exp->send("comando2\n")
>> >
>> >         No Net::Telnet você pode verificar o array de saída para
>> >         decidir a ação
>> >         a ser tomada:
>> >
>> >         #conecta
>> >         my $telnet = Net::Telnet->new( Host => "Servidor",
>> >                                        Prompt => '/fulano#/');
>> >         $telnet->login('usuario','senha');
>> >
>> >         #verifica se o diretório dir1 existe e muda o pwd
>> >         #para dir1. Se dir1 não existir sera criado'
>> >         my @saida = $telnet->cmd('ls -a');
>> >         if ('dir1' ~~ @saida) {
>> >                 $telnet->cmd( 'cd dir1/');}
>> >         else {
>> >                 $telnet->cmd( 'mkdir dir1' );
>> >                 $telnet->cmd( 'cd dir1/' ); }
>> >
>> >         espero ter ajudado.
>> >
>> >         abraços.
>> >         thiago glauco
>> >
>> >
>> >         On Sat, 2013-03-09 at 13:16 -0400, Marcio - Google wrote:
>> >         > Sim, mais a conexão e o ponto menos relevante nesse caso. O
>> >         problema é
>> >         > simular a interação e tratar "mapa de caracteres".
>> >         > Na verdade, nos primeiros testes que fiz, tentei conectar
>> >         com o
>> >         > cliente de telnet padrão, e não funciona. Tem que ser um
>> >         cliente
>> >         > próprio, que no caso eu usei o s3270.
>> >         >
>> >         > Em 09/03/2013 13:09, "thiago glauco sanchez"
>> >         > <thiagoglauco em ticursos.net> escreveu:
>> >         >         Humm...Se é para fazer telnet eu usaria o
>> >         Net::Telnet em vez
>> >         >         do Expect.
>> >         >         Algumas vezes eu utilizei o Expect e ele é um pouco
>> >         mais
>> >         >         demorado por
>> >         >         que utiliza o processo externo do telnet. No
>> >         Net::Telnet, é
>> >         >         criado o
>> >         >         cliente dentro do processo de sua aplicação. Mais
>> >         rápido e
>> >         >         seguro.
>> >         >
>> >         >         On Thu, 2013-03-07 at 14:33 -0300, Frederico Melo
>> >         wrote:
>> >         >         > Sr(a)s., Obrigado pela disponibilidade de alguns
>> >         com os
>> >         >         quais
>> >         >         > conversei *em paralelo* e me orientaram a postar
>> >         aqui...
>> >         >         Segue abaixo
>> >         >         > um resumo da minha dor de cabeça:
>> >         >         >
>> >         >         > Chamo-me Frederico, tenho alguns conhecimentos em
>> >         PHP, Perl,
>> >         >         MySQL e
>> >         >         > Linux. Aqui na empresa, trabalho com
>> >         desenvolvimento e até o
>> >         >         momento
>> >         >         > não tive problemas mas, surgiu um projeto que
>> >         estou
>> >         >         responsável onde
>> >         >         > será necessário coletar uma série de informações
>> >         em um
>> >         >         mainframe IBM,
>> >         >         > processá-las e armazená-las em MySQL. Apresentarei
>> >         os dados
>> >         >         em HTML.
>> >         >         > Então, gostaria muito de uma orientação para:
>> >         >         >
>> >         >         > 1 - com um servidor Linux sem interface gráfica,
>> >         acessar o
>> >         >         servidor
>> >         >         > IBM através de telnet na porta 23;
>> >         >         > 2 - capturar alguns dados nesse IBM e armazená-los
>> >         em MySQL
>> >         >         > 3 - após capturar os dados, devo escrever alguns
>> >         comandos no
>> >         >         IBM ou
>> >         >         > seja, o programa deve ser de mão-dupla (lê e
>> >         escrever no IBM
>> >         >         > utilizando usuário conhecido nesse ambiente);
>> >         >         > 4 - toda interface existente para o IBM é feita
>> >         por
>> >         >         aplicativos no
>> >         >         > Windows (Winsock 3270 Telnet, QWS3270)
>> >         >         > 5 - tenho instalado no servidor Linux expect, php,
>> >         perl,
>> >         >         mysql
>> >         >         >
>> >         >         > Penso em desenvolver algo com perl, expect, s3270
>> >         etc mas,
>> >         >         > sinceramente não sei qual a melhor solução.
>> >         >         > Tenho facilidade em aprender sozinho mas, preciso
>> >         de um
>> >         >         exemplo
>> >         >         > inicial onde eu possa testar e verificar o
>> >         resultado do que
>> >         >         está sendo
>> >         >         > feito. À partir daí, customizo e tento
>> >         implementar.
>> >         >         >
>> >         >         > No momento, estou CEGO caminhando em um terreno
>> >         novo, sem
>> >         >         saber muito
>> >         >         > bem por onde começar...
>> >         >         > Não tenho muita familiaridade com o Expect, nem
>> >         com o s3270.
>> >         >         Socorro e
>> >         >         > desculpem-me pela minha ignorância!
>> >         >         >
>> >         >         > Aprecio muito qualquer ajuda para eu começar.
>> >         >         > Obrigado!
>> >         >         >
>> >         >         > Frederico
>> >         >         > =begin disclaimer
>> >         >         >    Sao Paulo Perl Mongers:
>> >         http://sao-paulo.pm.org/
>> >         >         >  SaoPaulo-pm mailing list: SaoPaulo-pm em 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 em 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 em 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 em 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 em 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 em 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 em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130312/a13fc079/attachment-0001.html>


More information about the SaoPaulo-pm mailing list