Я пытаюсь запустить скрипт Python с помощью exec () из PHP. Моя команда отлично работает, когда я запускаю ее напрямую, используя cmd
окно, но при ошибке запускает ее из exec()
в PHP.
Мой скрипт Python использует NTLK для поиска собственных существительных. Пример команды:
"C:\Python25\python.exe" "C:\wamp\projects\python\trunk\tests\find_proper_nouns.py" "I went to London this morning"
возвращает [London]
когда я запускаю его из cmd
, но выдает ошибку в журнале Apache, когда я запускаю ту же команду из exec()
. Сценарий исправно запускает OK – если я изменяю скрипт python для print "Hello World"
это возвращается хорошо.
Я знаю, что очень важно, чтобы кто-нибудь знал, как исправить эту ошибку NLTK, но я действительно мог бы сделать с любыми указателями, почему ее запуск с exec
отличается от cmd
. (Команда идентична).
Я запускаю WAMP в Windows 7 с Apache 2.2.11.
Вот ошибка в журнале Apache:
Traceback (most recent call last): File "C:\wamp\projects\python\trunk\tests\find_proper_nouns_command_line.py", line 6, in <module> parts = nltk.pos_tag(text) File "C:\Python25\lib\site-packages\nltk\tag\__init__.py", line 62, in pos_tag tagger = nltk.data.load(_POS_TAGGER) File "C:\Python25\lib\site-packages\nltk\data.py", line 590, in load resource_val = pickle.load(_open(resource_url)) File "C:\Python25\lib\site-packages\nltk\data.py", line 669, in _open return find(path).open() File "C:\Python25\lib\site-packages\nltk\data.py", line 451, in find raise LookupError(resource_not_found) LookupError: ********************************************************************** Resource 'taggers/maxent_treebank_pos_tagger/english.pickle' not found. Please use the NLTK Downloader to obtain the resource: >>> nltk.download(). Searched in: - 'C:\\nltk_data' - 'D:\\nltk_data' - 'E:\\nltk_data' - 'C:\\Python25\\nltk_data' - 'C:\\Python25\\lib\\nltk_data' - 'C:\\Windows\\system32\\config\\systemprofile\\AppData\\Roaming\\nltk_data' **********************************************************************
Вероятно, ваш веб-сервер работает с другими привилегиями, чем вы. Возможные проблемы:
Совет: выполните набор как в командной строке, так и в процессе PHP и проверьте различия.
Вы должны запустить nltk.download()
и выбрать «maxent_treebank_pos_tagger». Вы должны сделать скрипт python и в нем поставить:
#!/usr/bin/python import nltk nltk.download('maxent_treebank_pos_tagger');
затем запустите его из командной строки. Он установит файлы данных для тегов POS, которые вы еще не установили.
После этого вы должны работать.
Из оболочки / терминала вы можете использовать:
sudo python -m nltk.downloader maxent_treebank_pos_tagger
Он установит maxent_treebank_pos_tagger
(т. Е. Стандартный теггер POS-дерева в NLTK).