[SP-pm] Automatizando consulta IBM com Perl ou Expect
Frederico Melo
fdmmelo at gmail.com
Wed Mar 13 10:59:08 PDT 2013
Oi Márcio,
Obrigado pela atenção. Eu peguei alguns daqueles códigos e rodei no meu
servidor.. Não consegui entender pelos códigos como passo o usuário e a
senha para ele se logar no IBM então, parei nesse ponto. Não cheguei a
testar mais do que isto. Como estou desenvolvendo dois sistemas em
paralelo, fiquei sobrecarregado com outra demanda e não pude evoluir. Se
puder me ajudar, agradeço mesmo!
Obrigado!
2013/3/12 Marcio - Google <marciorp at gmail.com>
> Você já usou aqueles códigos/exemplos?
> Qual foi o resultado?
> Em 12/03/2013 08:06, "Frederico Melo" <fdmmelo at 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 at 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 at 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 at 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 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
>>> > > =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
>>> > =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
>>>
>>
>>
>> =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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130313/5a18c81d/attachment-0001.html>
More information about the SaoPaulo-pm
mailing list