[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