<br><br><div class="gmail_quote">2008/12/11 Joao Gabriel <span dir="ltr"><<a href="mailto:jamorreu@gmail.com">jamorreu@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
As vezes 56 linhas bem comentadas valem mais do que 29 e-mails na qual<br>
50% ou 60% estão discutindo bobeiras sobre Japh...</blockquote><div>Claro, olha o nome do cara 'Daniel' precisa falar mais alguma coisa ? <br>hahahaha <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<font color="#888888"><br>
<br>
--<br>
João Gabriel C. Laass<br>
<br>
<br>
<br>
2008/12/11 Daniel Ruoso <<a href="mailto:daniel@ruoso.com">daniel@ruoso.com</a>>:<br>
</font><div><div></div><div class="Wj3C7c">> Em Ter, 2008-12-09 às 03:35 -0800, Patty Silva escreveu:<br>
>> Pessoal,<br>
>> Tem como eu imprimir na tela "Loading ................." quando<br>
>> executa o system??<br>
><br>
> Olá,<br>
><br>
> Pessoal, eu tenho me mantido meio calado ultimamente, mas vendo esse<br>
> thread enorme sem ninguem dar a solução para um problema que, precisamos<br>
> reconhecer, não é "de iniciante", resolvi dar a solução...<br>
><br>
> A resposta curta é: "Não use system".<br>
><br>
> A resposta longa é:<br>
><br>
><br>
> #!/usr/bin/perl<br>
> use strict;<br>
> use warnings;<br>
><br>
> use Symbol;<br>
> # essa linha define símbolos para os três filehandles,<br>
> # acho que eu vi isso pela primeira vez no PBP<br>
> my ($wtr, $rdr, $err) = map { gensym } 1..3;<br>
><br>
> use IPC::Open3;<br>
> my $pid = open3($wtr, $rdr, $err,<br>
> 'ls', '-la');<br>
><br>
> # considerando que o comando não recebe nada pelo stdin<br>
> close $wtr;<br>
><br>
> # usar o IO::Handle é legal porque ele dá uma visão OO sobre<br>
> # os filehandles, o que facilita algumas coisas...<br>
> use IO::Handle;<br>
> # por exemplo:<br>
> $_->blocking(0) for ($rdr, $err);<br>
> STDOUT->autoflush(1);<br>
><br>
> # usar o IO::Select também é legal, porque te permite acompanhar<br>
> # filehandles de uma maneira mais esperta<br>
> use IO::Select;<br>
> my $sel = IO::Select->new($rdr, $err);<br>
><br>
> # vamos fazer um loop, e ver se o comando escreveu alguma coisa,<br>
> # se ele não escrever em 1 segundo, imprimimos um "."<br>
> while (1) {<br>
> my @ready = $sel->can_read(1000);<br>
> foreach my $io (@ready) {<br>
> my $type = $io == $rdr ? '[STDOUT]' : '[STDERR]';<br>
><br>
> # Como estamos fazendo leitura não bloqueante, não devemos<br>
> # usar <$io>...<br>
> if (read $io, my $buf, 1024) {<br>
> print $type, ' ', $buf, $/;<br>
> } else {<br>
> # se read retornar 0 ou undef, é porque acabou o arquivo ou tem<br>
> # algum erro no filehandle, então vamos tirar do select.<br>
> $sel->remove($io);<br>
> }<br>
> }<br>
><br>
> # imprime o pontinho...<br>
> print '.' unless @ready;<br>
><br>
> # sai se não tem mais nenhum filehandle<br>
> last unless scalar $sel->handles;<br>
> };<br>
><br>
><br>
> # espera o processo sair de verdade;<br>
> waitpid $pid, 0;<br>
><br>
> __END__<br>
><br>
><br>
> e é isso aí...<br>
><br>
> _______________________________________________<br>
> Cascavel-pm mailing list<br>
> <a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
><br>
_______________________________________________<br>
Cascavel-pm mailing list<br>
<a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Procuro emprego C.V:<br><a href="http://danielmantovani.awardspace.com/">http://danielmantovani.awardspace.com/</a><br><br>print "\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/<br>
<br>