[Cascavel-pm] capturando saída de comandos com segurança
Alceu Rodrigues de Freitas Junior
glasswalk3r em yahoo.com.br
Sábado Janeiro 24 11:06:23 CST 2004
Olá gente,
Estou com uma dúvida de arrancar os cabelos...
Imaginem que quero executar comandos através do Perl, sem usar o shell, e capturando a saída padrão e saída de erro e ainda usando o modo Taint.
Então fiz assim:
--
#!/usr/bin/perl -T
open STDERR, ">&STDOUT" or die "impossível duplicar STDOUT: $!\n";
open(OUT,"-|") or exec ("/usr/bin/programa argumentos");
while(<OUT>) {
(algum processamento com o conteúdo lido DE STDERR E STDOUT)...
}
close(OUT);
--
Quando executo, a saída do STDERR é "cuspida" para o shell, e o loop com <OUT> nunca chega a acontecer, porque <OUT> é vazio...
Se eu incluir algo assim:
open STDOUT,">out.tmp";
Toda a saída, de STDERR e STDOUT vai para o arquivo texto. Mas o pipe (-|) não consegue capturar coisa alguma de STDOUT, quando o faria normalmente. Alguém consegue dizer por quê?
Eu fiz um teste e sei que dá para usar IPC::Open3 para fazer a mesma coisa, só que gerenciar STDERR e STDOUT é bastante complicado usando esse módulo.
Alguém conhece alguma outra forma menos dolorosa?
[]'s
--
Alceu Rodrigues de Freitas Junior
--
glasswalk3r em yahoo.com.br
PGP public key at http://www.imortais.cjb.net/addgb.html
---------------------------------------------------------------
"The 7 Deadly Sins are:/ Wealth without work/ Pleasure without
conscience/ Knowledge without character/ Business without
morality/ Science without humanity/ Worship without sacrifice/
Politics without principle" - Mahatma Ghandi
Mais detalhes sobre a lista de discussão Cascavel-pm