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

Marcio - Google marciorp at gmail.com
Mon Jul 9 18:16:17 PDT 2012


Olá Nelson, obrigado!

Sobre a sugestão 1, vou usar a partir de agora. O eles fazem?

Em relação ao pump, eu tentei usar, mais não sei o que esperar de
retorno. Pode ser qualquer coisa ou simplesmente nada.
Não consegui adaptar esse código (pump $h until $out =~ /second
input/;) a essa situação. Assim funcionaria, desde que eu consiga
pegar todo o retorno, independente de qual seja.
Depois penso realmente em usar expressão regular para procurar as
informações no meio do retorno.

O código adaptado ficou assim:

my $h = start \@s3270, \$in, \$out, \$err, timeout( 100 );
...
$in .= "Ascii(0,0,24,80)\n";
pump $h while length $in;     #Até aqui tudo certo. Pelo que entendi
ele fica no loop até enviar toda a entrada.

pump $h until $out ?????;    #Aqui não funciona, pois não sei o que esperar.
print $out;

$in = "disconnect\n";
$in .= "quit\n";

finish $h or die "s3270 returned $?";

warn $err if $err;
print $out;


Abs,

Marcio.

Em 9 de julho de 2012 14:24, Nelson Ferraz <nferraz em gmail.com> escreveu:
> Bem vindo `a lista de discussao, Marcio!
>
> Obrigado por ter contextualizado o problema e enviado o codigo -- isso
> facilita muito a vida de quem quer ajudar! :)
>
> E parabens por ter ido tao longe!
>
> Entao... mesmo sem ter acesso ao seu ambiente, aqui vao algumas sugestoes:
>
> 1) SEMPRE comece os seus programas com:
>
>     use strict;
>     use warnings;
>
> Isso vai te poupar muita dor de cabeca a longo prazo!
>
> 2) Acho que o que voce precisa e' do comando pump, como mostra o exemplo:
>
>    ## Build the harness, open all pipes, and launch the subprocesses
>    my $h = start \@cat, \$in, \$out;
>    $in = "first input\n";
>
>    ## Now do I/O.  start() does no I/O.
>    pump $h while length $in;  ## Wait for all input to go
>
>    ## Now do some more I/O.
>    $in = "second input\n";
>    pump $h until $out =~ /second input/;
>
>    ## Clean up
>    finish $h or die "cat returned $?";
>
> 3) Voce tambem pode usar uma expressao regular para esperar por uma
> determinada string:
>
>    $h = harness \@smbclient, \$in, \$out;
>
>    $in = "cd /src\n";
>    $h->pump until $out =~ /^smb.*> \Z/m;
>    die "error cding to /src:\n$out" if $out =~ "ERR";
>    $out = '';
>
>    $in = "mget *\n";
>    $h->pump until $out =~ /^smb.*> \Z/m;
>    die "error retrieving files:\n$out" if $out =~ "ERR";
>
>    $in = "quit\n";
>    $h->finish;
>
> Espero que isso ajude... caso contrario, continue mandando suas duvidas!
> =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