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

thiago glauco sanchez thiagoglauco at ticursos.net
Sat Mar 9 15:29:06 PST 2013


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




More information about the SaoPaulo-pm mailing list