В чем разница между запуском скрипта из командной строки и exec () с PHP?

Я пытаюсь запустить скрипт 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' ********************************************************************** 

Вероятно, ваш веб-сервер работает с другими привилегиями, чем вы. Возможные проблемы:

  • Разрешение пути / файла: может ли пользователь веб-сервера обращаться к файлам, которые ему нужны?
  • Другая среда: все необходимые переменные среды (PATH, Python-specific stuff, …) установлены?
  • Конфигурация: существуют ли пользовательские конфигурации для Python или модуля?

Совет: выполните набор как в командной строке, так и в процессе 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).