[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