[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