[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