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 class="HOEnZb"><font color="#888888">Thiago Glauco<br>
</font></span><div class="HOEnZb"><div class="h5"><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">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">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">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">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">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">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">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">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>