Tiago, ele pode usar full-duplex pipeling ou abrir um pipeline[0] para escrita e outro para leitura. Depois criar um processo para gerenciar o processo que o comando está rodando utilizando. fork[1]
Eu escrevi uma implementação parecida esses dias, a diferença é que eu paralelizei o processo que estava rodando o "comando" e mandei a saída de todos esses processos para um único processo que eu chamei de reader. Quando todos os processos que estavam executando os comandos termina, o processo manager mata o processo reader e o programa termina. 0 - http://perldoc.perl.org/functions/pipe.html 1 - http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html 2014-04-17 17:40 GMT-03:00 Tiago Peczenyj <[email protected]>: > se o cara vai ler da stdin ( e estamos admitindo que o cara fez um pipe para > o script ) ok, mas o Expect te dá apenas a opção de controlar o timeout com > processo como também é bidirecional. > > sem saber mais detalhes fica impossivel ajudar. > > 2014-04-17 17:33 GMT-03:00 Daniel de Oliveira Mantovani > <[email protected]>: > >> Oxi, você pode fazer isso sem usar expected.... >> >> given(<STDIN>) { >> >> } >> >> 2014-04-17 17:31 GMT-03:00 Frederico Melo <[email protected]>: >> > Oi Daniel, >> > >> > Preciso do expect pois vou interagir com o servidor. E analiso o que >> > esse >> > servidor escreve em uma tela para tomar a decisão do próximo passo... >> > >> > A estrutura que você sugeriu é legal mas, acho que só interagindo dentro >> > do >> > perl. >> > >> > Obrigado, >> > >> > >> > 2014-04-17 17:17 GMT-03:00 Daniel de Oliveira Mantovani >> > <[email protected]>: >> > >> >> Porque você quer usar expected ? (Seja lá o que esse método que você >> >> não especificou de onda venha faz). >> >> >> >> given ($text) { >> >> obj() when /OBJETIVO/; >> >> consulta() when /CONSULTA/; >> >> } >> >> >> >> 2014-04-17 17:01 GMT-03:00 Tiago Peczenyj <[email protected]>: >> >> > nunca usei assim mas baseado neste documento: >> >> > >> >> > http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod >> >> > >> >> > vc teria que usar o exp_continue no fim de cada subrotina. >> >> > >> >> > >> >> > 2014-04-17 16:58 GMT-03:00 Frederico Melo <[email protected]>: >> >> >> >> >> >> Monges! Socorro! >> >> >> Sou bem limitado na programação em perl mas estou evoluindo com o >> >> >> tempo. >> >> >> Então desculpem pelas minhas dúvidas que para vocês, pode ser muito >> >> >> simples... >> >> >> >> >> >> Bom, estou utilizando expect com perl e analiso alguns outputs de um >> >> >> servidor, em forma texto, que devo analisar e, dependendo da >> >> >> ocorrência >> >> >> de >> >> >> uma string, devo disparar uma determinada sub-rotina para tratativas >> >> >> específicas. >> >> >> >> >> >> Ex.: se aparecer a string CONSULTA, devo disparar a subrotina >> >> >> consulta() >> >> >> Se aparecer a string OBJETIVO, devo disparar a subrotina obj() e >> >> >> assim >> >> >> por >> >> >> diante. >> >> >> >> >> >> O output do servidor é verificado pelo expect e, no momento que devo >> >> >> tomar >> >> >> a decisão, a tela do output é apenas uma, com apenas uma das >> >> >> ocorrências >> >> >> abaixo. >> >> >> >> >> >> Para verificar isso, estruturei o código .pl assim: >> >> >> >> >> >> $exp->expect(2, >> >> >> >> >> >> [ qr/SELECIONE/ => \&select()], >> >> >> >> >> >> [ qr/OBJETIVO/ => \&obj()], >> >> >> >> >> >> [ qr/AGUARDE/ => \&sai_6()], >> >> >> >> >> >> [ qr/CONSULTA/ => \&consulta()], >> >> >> >> >> >> [ timeout => \&cancela() ], >> >> >> >> >> >> ); >> >> >> >> >> >> Ou seja, no meu entendimento limitado, quero que o expect dispare >> >> >> uma >> >> >> das >> >> >> subs acima dependendo da string que ele encontrar no output do >> >> >> servidor. >> >> >> >> >> >> Acredito que a estrutura acima, que parece uma matriz (desculpem a >> >> >> ignorância), vai executar TODAS as subs independente do conteúdo do >> >> >> output >> >> >> do servidor. >> >> >> >> >> >> O que está acontecendo é que o expect ou o perl só dispara a >> >> >> primeira >> >> >> sub... select()... independente da string encontrada... >> >> >> >> >> >> Sei que a condição para encontrar as strings funcionam pois, fiz um >> >> >> perl >> >> >> com expect para cada condição acima e, quando rodo individualmente >> >> >> cada >> >> >> .pl, >> >> >> funciona certo... o que estou errando? Como devo fazer o que >> >> >> preciso? >> >> >> >> >> >> Por favor, ajudem! >> >> >> >> >> >> Muito obrigado, >> >> >> Atte., >> >> >> Frederico >> >> >> >> >> >> >> >> >> =begin disclaimer >> >> >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> >> >> SaoPaulo-pm mailing list: [email protected] >> >> >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> >> >> =end disclaimer >> >> >> >> >> > >> >> > >> >> > >> >> > -- >> >> > Tiago B. Peczenyj >> >> > Linux User #405772 >> >> > >> >> > http://about.me/peczenyj >> >> > >> >> > =begin disclaimer >> >> > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> >> > SaoPaulo-pm mailing list: [email protected] >> >> > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> >> > =end disclaimer >> >> > >> >> >> >> >> >> >> >> -- >> >> >> >> -dom >> >> >> >> -- >> >> >> >> Daniel de Oliveira Mantovani >> >> Business Analytic Specialist >> >> Perl Evangelist /Astrophysics hobbyist. >> >> +55 11 9 8538-9897 >> >> XOXO >> >> =begin disclaimer >> >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> >> SaoPaulo-pm mailing list: [email protected] >> >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> >> =end disclaimer >> > >> > >> > >> > =begin disclaimer >> > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> > SaoPaulo-pm mailing list: [email protected] >> > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> > =end disclaimer >> > >> >> >> >> -- >> >> -dom >> >> -- >> >> Daniel de Oliveira Mantovani >> Business Analytic Specialist >> Perl Evangelist /Astrophysics hobbyist. >> +55 11 9 8538-9897 >> XOXO >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > -- -dom -- Daniel de Oliveira Mantovani Business Analytic Specialist Perl Evangelist /Astrophysics hobbyist. +55 11 9 8538-9897 XOXO =begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
