[Cascavel-pm] mais um pouco de Open3

Alceu R. de Freitas Jr. glasswalk3r em yahoo.com.br
Terça Maio 3 13:26:50 PDT 2005


Olá monges,

Vou ressuscitar um pouco o papo sobre como usar
IPC::Open3. Sobre o problema de verificar o processo
filho, a maneira mais simples que encontrei foi:

my $pid = open3(\*TOCHILD,\*CMD_OUT,\*CMD_ERR,
           
"$config{scannerpath}/$config{virusscanner}",
$config{viruscmd},"$config{downloads}/$temp_dir/$filename");

Depois

$SIG{CHLD} = sub { waitpid($pid, WNOHANG) > 0 };

Isso popula a variável $? com o código de retorno do
processo filho. Se ele for diferente de zero, algum
problema ocorreu.

Isto está funcionando ok, mas estou deparado com um
outro problema...

Para fazer o Open3 executar um comando SEM chamar o
shell, você tem que passar o comando na forma

open3(*ENTRADA, *SAIDA, *ERRO, comando, parametro1,
parametro2, parametroN);

Agora imaginem que o comando e os parametros do
comando eu leio de um arquivo de configuração, cujo
valores eu armazeno num hash (tendo o parametro como
chave). O arquivo de configuração seria algo como:

comando -> clamdscan
parametros -> -v

Imaginem que eu precise adicionar mais um parâmetro
parametros -> -v --output

Isso já faz o Open3 falhar. Na construção da linha de
comando, os parâmetros devem estar separados por
vírgulas. Mas como fazer isso em tempo de execução,
considerando que o Open3 já foi compilado?

Para agravar a situação, não tenho como prever quantos
parâmetros serão usados... o usuário pode querer usar
15 deles.

Alguma dica?

Se alguém quiser, posso anexar o código ao email.

[]'s


Alceu Rodrigues de Freitas Junior
--------------------------------------
glasswalk3r em yahoo.com.br
http://www.imortais.cjb.net
-----------------------------------------------------------------------
A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.
These are great mysteries -- The Tao Of Programming, 5.1


	
	
		
Yahoo! Acesso Grátis - Internet rápida e grátis. 
Instale o discador agora! http://br.acesso.yahoo.com/


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