2010-02-18 2 views
6

PHP에서 exec()를 사용하여 파이썬 스크립트를 실행하려고합니다. 내 명령은 cmd 창을 사용하여 직접 실행할 때 제대로 작동하지만 PHP의 exec()에서 실행하면 오류가 발생합니다.명령 행에서 스크립트를 실행하는 것과 PHP에서 exec()를 실행하는 것의 차이점은 무엇입니까?

My Python 스크립트는 NTLK을 사용하여 적절한 명사를 찾습니다. 예 명령 :

"C:\Python25\python.exe" "C:\wamp\projects\python\trunk\tests\find_proper_nouns.py" "I went to London this morning" 

반환 내가 국지적 인 스크립트가 defintely 실행 확인을 받고 exec()에서 동일한 명령을 실행할 때 로그 cmd에서 실행하지만, 아파치에 오류가 발생합니다 [London] - 내가 파이썬 스크립트를 변경하는 경우를 반환 된 값은 print "Hello World"입니다.

나는이 NLTK 오류를 수정하는 방법을 아는 사람이 누구인지를 잘 알고 있지만 실제로는 포인터를 사용하여 exec에서 실행하는 것이 cmd과 다릅니다. (명령은 동일합니다).

Windows 2.x에서 WAMP를 실행하고 있습니다.

다음은 아파치 로그에 오류 발생 :

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' 
********************************************************************** 

답변

2

귀하의 웹 서버는 아마 자신 이외의 권한으로 실행됩니다. 가능한 문제는 다음과 같습니다.

  • 경로/파일 권한 : 웹 서버 사용자가 필요한 파일에 액세스 할 수 있습니까?
  • 다른 환경 : 필요한 모든 환경 변수 (PATH, Python 특정 항목, ...)가 설정 되었습니까?
  • 구성 : 파이썬 또는 모듈에 대한 사용자 별 구성이 있습니까?

팁 : 명령 프롬프트와 PHP 프로세스 모두에서 세트을 실행하고 차이점을 확인하십시오.

30

nltk.download()을 실행하고 'maxent_treebank_pos_tagger'를 선택해야합니다. 파이썬 스크립트를 만들어야하고 그 안에 다음을 넣어야합니다.

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

그런 다음 명령 줄에서 실행하십시오. 아직 설치하지 않은 POS 태깅 용 데이터 파일을 설치합니다.

이렇게하면 제대로 작동합니다.

쉘/터미널에서
+0

파이썬이므로 두 번째 줄 끝에 세미콜론이 필요 없다는 점을 지적하고 싶습니다. – Gaurang

0

, 당신은 사용할 수 있습니다

sudo python -m nltk.downloader maxent_treebank_pos_tagger 

그것은 maxent_treebank_pos_tagger (NLTK에서 즉 표준 treebank의 POS 술래)를 설치합니다.

관련 문제