Я пытаюсь выполнить скрипт Python (3.6.5), который находится в одной папке внутри папки моего приложения Laravel.Сценарий вызывается из контроллера и получает выходные данные scrpit.Я использую Symfony / process для выполнения скрипта, как в коде ниже:
public static function searchAnswers($input)
{
$process = new Process(array('dir', base_path() . '/app/SearchEngine'));
$process->setWorkingDirectory(base_path() . '/app/SearchEngine');
$process->setCommandLine('python3 SearchEngine.py ' . '"'. $input .'"');
$process->setTimeout(2 * 3600);
$process->run();
if (!$process->isSuccessful()) { //Executes after the command finishes
throw new ProcessFailedException($process);
}
$list_ids = array_map('intval', explode(' ', $process->getOutput()));
info($list_ids);
$solicitations = Solicitation::join('answers', 'solicitations.id', '=', 'answers.solicitation_id')
->whereIn('solicitations.id', $list_ids)
->limit(20)
->get();
info($solicitations);
return $solicitations;
}
На моем локальном хосте скрипт вызывается без проблем, либо из моего терминала, либо из моего запущенного приложения черезHTTP-запросы.Но после того, как я загрузил версию своего приложения на свой удаленный сервер, которым является Debian, я получаю следующее исключение:
"""
The command "python3 SearchEngine.py "O que é diabetes?"" failed.\n
\n
Exit Code: 1(General error)\n
\n
Working directory: /var/www/plataformaTS/app/SearchEngine\n
\n
Output:\n
================\n
\n
\n
Error Output:\n
================\n
Traceback (most recent call last):\n
File "/usr/local/lib/python3.4/dist-packages/nltk/corpus/util.py", line 80, in __load\n
try: root = nltk.data.find('{}/{}'.format(self.subdir, zip_name))\n
File "/usr/local/lib/python3.4/dist-packages/nltk/data.py", line 675, in find\n
raise LookupError(resource_not_found)\n
LookupError: \n
**********************************************************************\n
Resource \e[93mstopwords\e[0m not found.\n
Please use the NLTK Downloader to obtain the resource:\n
\n
\e[31m>>> import nltk\n
>>> nltk.download('stopwords')\n
\e[0m\n
Searched in:\n
- '/var/www/nltk_data'\n
- '/usr/share/nltk_data'\n
- '/usr/local/share/nltk_data'\n
- '/usr/lib/nltk_data'\n
- '/usr/local/lib/nltk_data'\n
- '/usr/nltk_data'\n
- '/usr/share/nltk_data'\n
- '/usr/lib/nltk_data'\n
**********************************************************************\n
\n
\n
During handling of the above exception, another exception occurred:\n
\n
Traceback (most recent call last):\n
File "SearchEngine.py", line 20, in <module>\n
stopwords = stopwords.words('portuguese')\n
File "/usr/local/lib/python3.4/dist-packages/nltk/corpus/util.py", line 116, in __getattr__\n
self.__load()\n
File "/usr/local/lib/python3.4/dist-packages/nltk/corpus/util.py", line 81, in __load\n
except LookupError: raise e\n
File "/usr/local/lib/python3.4/dist-packages/nltk/corpus/util.py", line 78, in __load\n
root = nltk.data.find('{}/{}'.format(self.subdir, self.__name))\n
File "/usr/local/lib/python3.4/dist-packages/nltk/data.py", line 675, in find\n
raise LookupError(resource_not_found)\n
LookupError: \n
**********************************************************************\n
Resource \e[93mstopwords\e[0m not found.\n
Please use the NLTK Downloader to obtain the resource:\n
\n
\e[31m>>> import nltk\n
>>> nltk.download('stopwords')\n
\e[0m\n
Searched in:\n
- '/var/www/nltk_data'\n
- '/usr/share/nltk_data'\n
- '/usr/local/share/nltk_data'\n
- '/usr/lib/nltk_data'\n
- '/usr/local/lib/nltk_data'\n
- '/usr/nltk_data'\n
- '/usr/share/nltk_data'\n
- '/usr/lib/nltk_data'\n
**********************************************************************\n
\n
"""
Исключение указывает на ошибки импорта в скрипте python.Но когда я выполняю скрипт из терминала на удаленном сервере напрямую или по командам Artisan, все работает нормально.Есть идеи, что происходит?
Заранее спасибо!