[SP-pm] Automatizando consulta IBM com Perl ou Expect
thiago glauco sanchez
thiagoglauco at ticursos.net
Sat Mar 9 13:16:39 PST 2013
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
More information about the SaoPaulo-pm
mailing list