Oi Márcio,<br><br>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!<br>
<br>Obrigado!<br><br><div class="gmail_quote">2013/3/12 Marcio - Google <span dir="ltr"><<a href="mailto:marciorp@gmail.com" target="_blank">marciorp@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p>Você já usou aqueles códigos/exemplos? <br>
Qual foi o resultado?</p>
<div class="gmail_quote">Em 12/03/2013 08:06, "Frederico Melo" <<a href="mailto:fdmmelo@gmail.com" target="_blank">fdmmelo@gmail.com</a>> escreveu:<div><div class="h5"><br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Thiago,<br>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:<br>


<span style="font-family:courier new,monospace"><br> EMXXYY<br> EEEEEEE  MM     MM  BBBBBBB   RRRRRRR    EEEEEEEE    SSSSSS      AAAAAAAA<br> EE       MMM   MMM  BB    BB  RR    RR   EE        SS      SS   AA      AA<br>

 EE       MM MMM MM  BB    BB  RR    RR   EE        SS           AA      AA<br>
 EEEEE    MM  M  MM  BBBBBB    RRRRRRR    EEEEEEEE    SSSSSS     AAAAAAAAAA<br> EE       MM     MM  BB        RR   RR    EE                SS   AA      AA<br> EE       MM     MM  BB        RR    RR   EE        SS      SS   AA      AA<br>


 EEEEEEE  MM     MM  BB        RR     RR  EEEEEEEE    SSSSSS     AA      AA<br> <br> <br>  ACESSO AOS SERVICOS DO IBM                                Data....: 12.03.13<br>                                                            Hora....: 08.50.59<br>


  Identifique-se fornecendo:                                Terminal: XXX393939<br> <br>  Userid ..............               Voce e' responsavel pelos atos praticados<br>  Senha ...............               com  o seu  codigo  de usuario, portanto<br>


  Codigo do servico....               para a  sua seguranca,   NAO FORNECA SUA<br>  Grupo ...............               SENHA PARA NINGUEM.<br>  Nova Senha ..........<br> <br>  Atencao: Em caso de problema telefone para XXX DA SUA LOCALIDADE ou<br>


  PF 1=Help     (xxx)xxx ou 0800-xxx ( HELP-DESK )</span><br><br><br>Márcio,<br>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.<br>


<br>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á!<br><br>Abraços,<br>Fred<br><br><br><div class="gmail_quote">


2013/3/9 thiago glauco sanchez <span dir="ltr"><<a href="mailto:thiagoglauco@ticursos.net" target="_blank">thiagoglauco@ticursos.net</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Entendi. Dei uma pesquisada. De acordo com o IETF o TN3270 tem<br>
diferenças do tty padrão:<br>
<br>
"3270 display terminal data differs from traditional display terminal<br>
   data in that it is block mode and uses EBCDIC instead of ASCII<br>
   character representation. These two differences are the primary<br>
   reason for the differentiation of TN3270 from standard Telnet in this<br>
   document."<br>
<br>
Então,<br>
Expect->spawn('s3270' , @parameters) deve funcionar como no exemplo do<br>
e-mail anterior.<br>
<br>
De qualquer forma acho que isso pode te ajudar:<br>
<br>
<a href="http://www.linuxquestions.org/questions/linux-software-2/how-do-i-use-s3270-x3270-for-scripting-767067/" target="_blank">http://www.linuxquestions.org/questions/linux-software-2/how-do-i-use-s3270-x3270-for-scripting-767067/</a><br>



<br>
<br>
espero ter ajudado.<br>
abraços<br>
<span><font color="#888888">Thiago Glauco<br>
</font></span><div><div><br>
On Sat, 2013-03-09 at 16:38 -0400, Marcio - Google wrote:<br>
> Thiago, o que estou te dizendo é que com cliente telnet comum você não<br>
> conecta no mainframe, pelo menos eu não consegui. Por isso que fui<br>
> atrás de outro cliente.<br>
> Acho que o Eden sabe explicar o motivo.<br>
><br>
> Em 09/03/2013 16:09, "thiago glauco sanchez"<br>
> <<a href="mailto:thiagoglauco@ticursos.net" target="_blank">thiagoglauco@ticursos.net</a>> escreveu:<br>
>         A interação humana no expect é usada por pattern match:<br>
><br>
>             $exp->expect($timeout,<br>
>                          [ timeout => \&report_timeout ],<br>
>                          [ qr/pattern/ => \&handle_pattern],<br>
>                         );<br>
><br>
>         Ex:<br>
>         #efetua login<br>
>         my @parameters = ('host')<br>
>         Expect->spawn('telenet' , @parameters)<br>
>             $exp->expect($timeout,<br>
>                 [ qr/username/ => sub { my $self = shift;<br>
>                                         $self->send('usuario\n');<br>
>                                         return 'exp_continue'}],<br>
>                 [qr/password/ => sub { my $self = shift;<br>
>                                         $self->send('password\n');<br>
>                                         return 'exp_continue'} ],<br>
>                 'bash$');<br>
><br>
><br>
>         #agora você está no servidor e pode enviar comandos:<br>
>         $exp->send("comando1\n")<br>
><br>
>         #e definir ações conforme padrões de texto da saída do<br>
>         comando.<br>
>         $exp->expect($timeout,<br>
>                 [ qr/pattern1/ => sub { my $self = shift;<br>
>                                         ...ação 1<br>
>                                         ...isso é uma sub.<br>
>                                         ..você pode fazer qualquer<br>
>         coisa aqui}],<br>
>                 [qr/pattern2/ => sub { my $self = shift;<br>
>                                         ...ação 2} ],<br>
>                 'bash$');<br>
>         #e fazer o mesmo para n comandos.<br>
>         $exp->send("comando2\n")<br>
><br>
>         No Net::Telnet você pode verificar o array de saída para<br>
>         decidir a ação<br>
>         a ser tomada:<br>
><br>
>         #conecta<br>
>         my $telnet = Net::Telnet->new( Host => "Servidor",<br>
>                                        Prompt => '/fulano#/');<br>
>         $telnet->login('usuario','senha');<br>
><br>
>         #verifica se o diretório dir1 existe e muda o pwd<br>
>         #para dir1. Se dir1 não existir sera criado'<br>
>         my @saida = $telnet->cmd('ls -a');<br>
>         if ('dir1' ~~ @saida) {<br>
>                 $telnet->cmd( 'cd dir1/');}<br>
>         else {<br>
>                 $telnet->cmd( 'mkdir dir1' );<br>
>                 $telnet->cmd( 'cd dir1/' ); }<br>
><br>
>         espero ter ajudado.<br>
><br>
>         abraços.<br>
>         thiago glauco<br>
><br>
><br>
>         On Sat, 2013-03-09 at 13:16 -0400, Marcio - Google wrote:<br>
>         > Sim, mais a conexão e o ponto menos relevante nesse caso. O<br>
>         problema é<br>
>         > simular a interação e tratar "mapa de caracteres".<br>
>         > Na verdade, nos primeiros testes que fiz, tentei conectar<br>
>         com o<br>
>         > cliente de telnet padrão, e não funciona. Tem que ser um<br>
>         cliente<br>
>         > próprio, que no caso eu usei o s3270.<br>
>         ><br>
>         > Em 09/03/2013 13:09, "thiago glauco sanchez"<br>
>         > <<a href="mailto:thiagoglauco@ticursos.net" target="_blank">thiagoglauco@ticursos.net</a>> escreveu:<br>
>         >         Humm...Se é para fazer telnet eu usaria o<br>
>         Net::Telnet em vez<br>
>         >         do Expect.<br>
>         >         Algumas vezes eu utilizei o Expect e ele é um pouco<br>
>         mais<br>
>         >         demorado por<br>
>         >         que utiliza o processo externo do telnet. No<br>
>         Net::Telnet, é<br>
>         >         criado o<br>
>         >         cliente dentro do processo de sua aplicação. Mais<br>
>         rápido e<br>
>         >         seguro.<br>
>         ><br>
>         >         On Thu, 2013-03-07 at 14:33 -0300, Frederico Melo<br>
>         wrote:<br>
>         >         > Sr(a)s., Obrigado pela disponibilidade de alguns<br>
>         com os<br>
>         >         quais<br>
>         >         > conversei *em paralelo* e me orientaram a postar<br>
>         aqui...<br>
>         >         Segue abaixo<br>
>         >         > um resumo da minha dor de cabeça:<br>
>         >         ><br>
>         >         > Chamo-me Frederico, tenho alguns conhecimentos em<br>
>         PHP, Perl,<br>
>         >         MySQL e<br>
>         >         > Linux. Aqui na empresa, trabalho com<br>
>         desenvolvimento e até o<br>
>         >         momento<br>
>         >         > não tive problemas mas, surgiu um projeto que<br>
>         estou<br>
>         >         responsável onde<br>
>         >         > será necessário coletar uma série de informações<br>
>         em um<br>
>         >         mainframe IBM,<br>
>         >         > processá-las e armazená-las em MySQL. Apresentarei<br>
>         os dados<br>
>         >         em HTML.<br>
>         >         > Então, gostaria muito de uma orientação para:<br>
>         >         ><br>
>         >         > 1 - com um servidor Linux sem interface gráfica,<br>
>         acessar o<br>
>         >         servidor<br>
>         >         > IBM através de telnet na porta 23;<br>
>         >         > 2 - capturar alguns dados nesse IBM e armazená-los<br>
>         em MySQL<br>
>         >         > 3 - após capturar os dados, devo escrever alguns<br>
>         comandos no<br>
>         >         IBM ou<br>
>         >         > seja, o programa deve ser de mão-dupla (lê e<br>
>         escrever no IBM<br>
>         >         > utilizando usuário conhecido nesse ambiente);<br>
>         >         > 4 - toda interface existente para o IBM é feita<br>
>         por<br>
>         >         aplicativos no<br>
>         >         > Windows (Winsock 3270 Telnet, QWS3270)<br>
>         >         > 5 - tenho instalado no servidor Linux expect, php,<br>
>         perl,<br>
>         >         mysql<br>
>         >         ><br>
>         >         > Penso em desenvolver algo com perl, expect, s3270<br>
>         etc mas,<br>
>         >         > sinceramente não sei qual a melhor solução.<br>
>         >         > Tenho facilidade em aprender sozinho mas, preciso<br>
>         de um<br>
>         >         exemplo<br>
>         >         > inicial onde eu possa testar e verificar o<br>
>         resultado do que<br>
>         >         está sendo<br>
>         >         > feito. À partir daí, customizo e tento<br>
>         implementar.<br>
>         >         ><br>
>         >         > No momento, estou CEGO caminhando em um terreno<br>
>         novo, sem<br>
>         >         saber muito<br>
>         >         > bem por onde começar...<br>
>         >         > Não tenho muita familiaridade com o Expect, nem<br>
>         com o s3270.<br>
>         >         Socorro e<br>
>         >         > desculpem-me pela minha ignorância!<br>
>         >         ><br>
>         >         > Aprecio muito qualquer ajuda para eu começar.<br>
>         >         > Obrigado!<br>
>         >         ><br>
>         >         > Frederico<br>
>         >         > =begin disclaimer<br>
>         >         >    Sao Paulo Perl Mongers:<br>
>         <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>         >         >  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>         >         ><br>
>          L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
>         >         > =end disclaimer<br>
>         ><br>
>         ><br>
>         >         =begin disclaimer<br>
>         >            Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>         >          SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>         >          L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
>         >         =end disclaimer<br>
>         > =begin disclaimer<br>
>         >    Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>         >  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>         >  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
>         > =end disclaimer<br>
><br>
><br>
>         =begin disclaimer<br>
>            Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>          SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>          L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
>         =end disclaimer<br>
> =begin disclaimer<br>
>    Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
> =end disclaimer<br>
<br>
<br>
=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div><br>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div></div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br>