[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