Проблемы с передачей данных между PHP и Python - PullRequest
1 голос
/ 14 декабря 2010

Я пытался настроить очень простую поисковую систему, используя модули Whoosh в python, вызванные из PHP.Я работал до тех пор, пока не обновил модули для некоторых дополнительных функций, которые мне были нужны.В этот момент, казалось, появилась странная ошибка.Любой оператор печати после строки «searcher = ixtemp.searcher ()» не получен сценарием PHP.

Сценарий поиска python вызывается из PHP, и первый результат отображается с помощью следующих команд

exec("python print.py",$output,$ret_code);

echo $output[0];

Скрипт python -

from whoosh.index import open_dir

ixtemp = open_dir("index")

searcher = ixtemp.searcher()

results = searcher.find("content", u""+"test")

for k in results:
    print k['filename']

При запуске PHP теперь выдается следующая ошибка -

Примечание: неопределенное смещение: 0 in / opt / lampp /htdocs / new / search.php в строке 17

Скрипт python работает, когда я запускаю его сам.После небольшого исследования кажется, что любые операторы печати перед строкой «searcher = ixtemp.searcher ()» могут быть прочитаны PHP, но все они не получены сценарием PHP.Я также попробовал функции popen () и proc_open, но у них та же проблема.

Любые идеи о том, в чем проблема или как я могу обойти ее?

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 декабря 2010

Вы уверены, что скрипт вообще работает?

Проверьте код $ return_code.

Возможно, он не может найти ваш скрипт print.py или, возможно, даже python.exe.

0 голосов
/ 14 декабря 2010

Я исчерпал идеи и решил chmod 777 каталог ... и ... он работал. Я не уверен, почему это произошло, так как данные всегда могли быть отправлены выше функции поисковика ().

Возможно, при запуске поиска метод пытался изменить защищенные индексные файлы?

Но это само по себе не могло быть проблемой, поскольку это всегда работало от переводчика.

Так что, должно быть, это файл PHP. Кажется, это была защита от косвенного изменения индексных файлов.

0 голосов
/ 14 декабря 2010

Две вещи.Вы уверены, что сценарий завершается?Это может зависать при вызове поисковика ().Во-вторых, я полагаю, что Searcher () мог бы перенаправить стандартный вывод.

Я предполагаю, что ваш сценарий не завершается или его время истекло или что-то в этом роде.

EDIT Looksкак этот код зависит от текущего рабочего каталога.Вы упоминаете ниже, что он работает нормально в интерпретаторе - в том же wd, который настроен веб-сервером?

...