[Cascavel-pm] mais um pouco de Open3

Luis Campos de Carvalho monsieur_champs em yahoo.com.br
Terça Maio 3 14:39:04 PDT 2005


--- "Alceu R. de Freitas Jr." <glasswalk3r em yahoo.com.br> escreveu:
> 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?
> 
  Você tem controle sobre cada parâmetro adicionado?
  Se a única forma de adicionar novos parâmetros for um-a-um, podemos usar um array ref para
armazená-los sob a chave "parametros" do seu hash. E assim você pode passar 

  open3( \*TOCHILD,\*CMD_OUT,\*CMD_ERR,$hash{comando}, @{$hash{parametros}} );

  E tudo vai funcionar como você deseja... :-)

  Fácil!!
  Putamplexos, boa sorte, e nos mantenha informados!

--
Luis Campos de Carvalho
Member of "São Paulo Perl Mongers",
Unix SysAdmin & OCP/DBA Oracle
http://br.geocities.com/monsieur_champs/

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger 
http://br.download.yahoo.com/messenger/ 


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