[SP-pm] Perl para automação em acesso a x3270 IBM

Marcio - Google marciorp at gmail.com
Wed Jul 11 19:39:18 PDT 2012


Olá Prof. Eden,

Montei esse primeiro exemplo, tipo "Olá mundo!", mais esbarrei em um
erro que não consigo resolver.

#!/usr/bin/perl

use strict;
use warnings;
use Expect;

my $exp = Expect->spawn('s3270');

$exp->log_file('/home/marcio/teste3.log');

my $cmd1 = "connect(10.1.8.192:23)\n";
   $cmd1 .= "wait(InputField)\n";

$exp->send($cmd1);
$exp->expect(100, [qr/.{1920}/ => sub {
                                         my($self) = @_;
                                         print $self->match;

                                         exp_continue;
                                      },
                   timeout => sub { die 'o sistema parou de responder' }
                  ]
            )

Roda certinho, pelo menos não dá erro nenhum, o problema é que como se
no lugar do "\n" no final dos comandos, ele trocasse por "^M", e ai dá
erro no s3270. No mesmo exemplo usando o IPC::Run não acontece isso.

Veja a saída no terminal:

connect(10.1.8.192:23)^M
wait(InputField)^M
L U U N N 4 24 80 0 0 0x0 0.024^M
error^M
data: Wait: Not connected^M
L U U N N 4 24 80 0 0 0x0 -^M
error^M

E o arquivo de log (/home/marcio/teste3.log):

connect(10.1.8.192:23)^M
wait(InputField)^M
L U U N N 4 24 80 0 0 0x0 0.026
error
data: Wait: Not connected
L U U N N 4 24 80 0 0 0x0 -
error


Tem alguma ideia?

Em tempo, essa expressão (qr/.{1920}/) pega o retorno com 1920
caracteres. Vou colocar várias expressões, agora como faço uma tipo
"default", se não casar com nenhuma das anteriores cai nessa última?

Desculpe a lerdeza, mais é que como disse não sou programador, tó
quebrando um galho para resolver um problema do meu sistema Asterisk.

Abs,

Marcio.


More information about the SaoPaulo-pm mailing list