2010-02-18 99 views
6

我想在PHP中使用exec()來運行Python腳本。當我直接使用cmd窗口運行它時,我的命令工作正常,但是當我在PHP中使用exec()運行它時會產生錯誤。從命令行和exec()與PHP運行腳本有什麼區別?

我的Python腳本使用NTLK來查找專有名詞。例如命令:

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

回報,當我從cmd運行它,但在Apache的拋出一個錯誤,當我從exec()運行相同的選指令,腳本defintely越來越運行正常登錄[London] - 如果我改變了python腳本是print "Hello World"這是很好的回報。

我知道如何解決這個NLTK錯誤是一個很大的問題,但我真的可以做任何指示,爲什麼從exec運行它不同於cmd。 (該命令是相同的)。

我使用Apache 2.2.11在Windows 7上運行WAMP。

這裏是在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' 
********************************************************************** 

回答

2

你的Web服務器有可能與其他特權比你運行。可能的問題包括:

  • 路徑/文件權限:Web服務器用戶可以訪問它需要的文件嗎?
  • 不同的環境:所有必要的環境變量(PATH,Python特定的東西,...)集?
  • 配置:是否有Python或模塊的每個用戶配置?

提示:在命令提示符下執行設置並從PHP進程中檢查差異。

30

您必須運行nltk.download()並選擇'maxent_treebank_pos_tagger'。您必須製作一個python腳本並在其中放入:

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

然後從命令行運行它。它將安裝您尚未安裝的POS標籤的數據文件。

當你這樣做後,它應該工作。

+0

只是想指出,因爲它是Python,所以在第二行末尾不需要分號。 – Gaurang 2014-11-03 06:09:29

0

從殼/終端,可以使用:

sudo python -m nltk.downloader maxent_treebank_pos_tagger 

它將安裝maxent_treebank_pos_tagger(即標準樹庫POS中NLTK標註器)。

相關問題