У меня есть скрипт Python (analy.py), который принимает имя файла в качестве параметра и анализирует его. Когда это сделано с анализом, он ждет другого имени файла. Что я хочу сделать, это:
Я могу опубликовать параметр из PHP в качестве аргумента командной строки в Python, но я не могу отправить параметр в скрипт Python, который уже работает в фоновом режиме.
Есть идеи?
Очевидный ответ здесь:
analyze.py
один раз за имя файла, вместо того, чтобы запускать его как демон.analyze.py
целый ряд имен файлов при запуске, вместо того, чтобы передавать их по одному.Но может быть причина, по которой ни один очевидный ответ не сработает в вашем случае. Если так, то вам нужна какая-то форма межпроцессного взаимодействия. Есть несколько альтернатив:
mmap
-ed файл, или аналог как в родительском и дочернем. Вероятно, это также требует совместного использования семафора, который вы можете использовать для создания условия или события, поэтому у ребенка есть некоторый способ ждать следующего ввода.Вот что я сделал.
PHP часть:
<?php
$param1 = "filename";
$command = "python analyze.py ";
$command .= " $param1";
$pid = popen( $command,"r");
echo "<body><pre>";
while( !feof( $pid ) )
{
echo fread($pid, 256);
flush();
ob_flush();
}
pclose($pid);
?>
Python Part:
1. I used [JSON-RPC]: https://github.com/gerold-penz/python-jsonrpc to
create a http service that wraps my python script (runs forever)
2. Created a http client that calls the method of http service.
3. Printed the results in json format.
Работает как шарм.