[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