quarta-feira, 24 de fevereiro de 2010

PHP e processos Python em background

Há um bom tempo que tenho tentado resolver este problema. Para quem não sabe, eu estou implementando uma interface WEB para o Illusion. Esta interface é escrita em HTML e PHP. Eu meio que to aproveitando pra criar um pouco de vergonha na cara e aprender alguma coisa de desenvolvimento pra WEB.

O meu maior problema nessa história toda é que eu tinha que rodar um script Python de dentro de um script PHP. Até aí o problema não é tão bizarro assim. As funções exec() e popen() dariam conta do recado.

Entretando, tando uma quanto a outra deixam o navegador do cliente pendurado. Esperando. Parado. E logo veio minha pergunta: como disparar um processo Python em background de um arquivo PHP?

Melhor do que ficar escrevendo, acho mais simples colocar o código aqui.


main.php
Running the engine. . .
");
$handler = popen("python dummy.py", "r");
while(!feof($handler))
{
print(fgets($handler));
print("
");
flush();
sleep(3);
}
pclose($handler);
print "done";
?>
E o arquivo Python foi simplesmente:

dummy.py
import time
print "Starting a process..."
for i in range(30):
print i
time.sleep(1)
print "Process done!"
Sei que não fui muito didático. Mas esse também é o tipo de coisa que quero lembrar.