У меня есть простая функция PHP, которая должна выполнять скрипт Pyton при его вызове. Я пробовал эту функцию несколько раз в своих php-программах, но как-то на этот раз эта функция вообще не выполняет скрипт python. Когда я получаю доступ к скрипту из командной строки и запускаю python testing.py
он успешно запускается. Одна вещь, которую я хочу упомянуть, что этот скрипт имеет некоторые серьезные реализации библиотеки NLTK python и занимает более 20 секунд для выполнения и выполнения его операций (то есть обработки данных и хранения данных в db). Является ли эта задержка в выполнении, которая вызывает эту проблему, или есть что-то еще, что мне не хватает на этот раз?
function success(){ $mystring = exec('python testing.py'); $mystring; if(!$mystring){ echo "python exec failed"; } else{ echo "<br />"; echo "successfully executed!"; }
вы должны использовать полный путь для python
и для вашего файла. вы можете найти первое из команды which python
, которая, скорее всего, выводит «/ usr / bin / python», и вы уже должны знать последнее. поэтому ваша команда будет выглядеть так:
$mystring = exec('/usr/bin/python /home/user/testing.py');
и вы должны убедиться, что ваш скрипт python имеет все необходимые разрешения, потому что ваш веб-сервер, скорее всего, работает как другой пользователь, поэтому разрешения должны быть «-rwxrwxr-x» или что-то близкое.
попробуйте использовать точный путь к программе python.
$mystring = exec('python testing.py');
Попробуйте удалить $mystring;
линия
function success() { $mystring = exec('python testing.py'); if(!$mystring){ echo "python exec failed"; } else { echo "<br />"; echo "successfully executed!"; } }
В целях тестирования попробуйте:
function success() { $mystring = exec('python testing.py', $output); var_dump($output); }
Нет проблемы с exec () или что-то еще.
Проблема в том, что модуль nltk не может найти каталог nltk_data. Для этого просто найдите где nltk_data присутствует в вашей системе: обычно ~ / nltk_data.
Теперь импортируйте этот путь при запуске функции.
import nltk;
Теперь nltk.data.path – это список мест для поиска модулей.
Вы можете просто выполнить nltk.data.path.append («ваше местоположение / каталог»);