Чем отличается запуск скрипта из командной строки и от exec () с PHP? - PullRequest
7 голосов
/ 18 февраля 2010

Я пытаюсь запустить скрипт 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(). Сценарий определенно запускается нормально - если я изменяю сценарий 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'
**********************************************************************

Ответы [ 3 ]

31 голосов
/ 06 марта 2011

Вам нужно запустить nltk.download() и выбрать «maxent_treebank_pos_tagger». Вы должны сделать скрипт Python и в него положить:

#!/usr/bin/python
import nltk
nltk.download('maxent_treebank_pos_tagger');

затем запустите его из командной строки. Он установит файлы данных для POS-тегов, которые вы еще не установили.

После этого все должно заработать.

2 голосов
/ 19 февраля 2010

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

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

Совет: выполните set как в командной строке, так и из процесса PHP и проверьте различия.

1 голос
/ 16 сентября 2015

Из оболочки / терминала вы можете использовать:

sudo python -m nltk.downloader maxent_treebank_pos_tagger

Он установит maxent_treebank_pos_tagger (т. Е. Стандартный POS-тег в древовидной структуре в NLTK).

...