[Cascavel-pm] Executar system
Luis Motta Campos
luismottacampos em yahoo.co.uk
Quinta Dezembro 11 14:25:04 PST 2008
Agnaldo Macedo wrote:
> Aproveitando....
>
> Quais seriam as melhores opções (alternativas) para system?
> Levando-se em consideração que:
> a) Não é um comando do SO que será chamado
> b) É uma aplicação feita em outra linguagem/ferramenta (converter para
> Perl não é uma opção)
> c) Além de chamar, precisa passar dados para quem esta sendo chamado.
Como sempre, mais perguntas que respostas:
Alternativa 1:
Se você tem parte do código escrito em outra linguagem, por que você não
pode continuar a implementação e incorporar o que você já tem como uma
biblioteca nesta linguagem? Assim, a maior parte dos seus problemas
desaparece sem fazer força;
Alternativa 2:
Se não tem jeito e você precisa mesmo rodar um programa externo, tem uma
coisa importante a considerar:
A) Se você não precisa retornar nada, use exec(). O teu programa
proprietário assume o controle e não é preciso se chatear com o que vai
acontecer daí para adiante.
B) Agora, se você precisa retornar alguma coisa, é preciso saber:
B.1) O quê você quer retornar? Será que o programa não pode fazer isso
por você por conta própria? Se este é o teu caso, você ainda pode usar
exec() e esquecer que você tinha um problema;
B.2) Como o programa funciona? Programas velhos normalmente são simples,
eles imprimem para STDOUT ou STDERR. É possível resolver o problema
capturando as saídas? Então IPC::Open2 ou IPC::Open3 podem ser a tua saída.
B.3) Caso o programa seja velho mas mais sofisticado, e você precise
interagir com ele de alguma forma enquanto captura a saída, ou precisa
esperar e dar feedback para o usuário enquanto alguma coisa acontece, eu
recomendo que se use técnicas de /pooling/ com o módulo Expect, fork() e
select(), ou, se você tiver tempo e não tiver medo da curva de
aprendizado mais íngreme, POE.
Espero que isso ajude.
Putamplexos.
--
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.
Mais detalhes sobre a lista de discussão Cascavel-pm