[Cascavel-pm] captura de mensagens de programa

Ednardo Lobo ednardo em elobo.cjb.net
Domingo Março 9 22:36:52 CST 2003


On Fri, Feb 28, 2003 at 04:57:06PM -0300, Alceu Rodrigues de Freitas Junior wrote:
> Olá lista,
> 
> Estou tentando  criar um CGI que  executa um comando de  sistema. Como
> iniciativa de torná-lo mais seguro, eu ativei o modo Taint (-T).
>
> Para poder executar o programa sem chamar o shell eu tenho que fazer:
>
> system ("/usr/bin/programa","parametro1","parametro2");
> 
> ou então
> 
> my $pid = open (PROG,"-|");
> die "cannot fork $!" unless defined $pid;
> unless ($pid) {
> 	exec /usr/bin/programa, $parametro1, $parametro2 or die "cannot open pipe programa: $!";
> }
> 
> Como eu  quero capturar  a saída do  programa, eu  logicamente deveria
> utilizar a segunda forma. O problema é que eu queria testar a execução
> do  programa, e  em  caso  de erro,  utilizar  a  própria mensagem  do
> programa e  criar uma  mensagem acompanhada  de header  http e  tudo o
> mais.
>
> my $pid = open (PROG,"-|");
> die "cannot fork $!" unless defined $pid;
> unless ($pid) {
> 	my $resultado = exec /usr/bin/programa, $parametro1, $parametro2;
> }
> 
> A variável escalar $resultado simplesmente  não recebe valor algum! Eu
> não quero usar die para verificar a  saída do programa, e sim checar o
> valor da variável para exibir ou não uma mensagem de erro.
>
> Alguém já passou por situação semelhante? Eu variações do uso de open,
> sem sucesso.
>
> []'s
>

    Quanto ao  `exec', após  sua chamada, não  há retorno,  seu `script'
perl finaliza a execução nesse  ponto. Porém, se `/usr/bin/programa' não
existir, nesse caso um valor falso será retornado.

    Se o  que você quer  fazer for  simplesmente executar um  programa e
obter  a  saída desse  programa,  não  precisará  criar um  pipe,  basta
utilizar o operador `qx//' (veja  `man perlop'). Você poderá obter tanto
'STDOUT' quanto 'STDERR'.


-- 
    Ednardo Lobo - www.elobo.cjb.net

    Por favor, evitem enviar anexos no formato MS-Office, obrigado!
    Veja: http://www.fsf.org/philosophy/no-word-attachments.pt.html

--
	Nao e que voce seja diferente, e que ninguem consegue ser 
	igual a voce.



Mais detalhes sobre a lista de discussão Cascavel-pm