2010-02-18 8 views
6

Sto provando a eseguire uno script Python usando exec() da PHP. Il mio comando funziona bene quando lo eseguo direttamente utilizzando una finestra cmd, ma genera un errore quando lo eseguo da exec() in PHP.Qual è la differenza tra l'esecuzione di uno script dalla riga di comando e da exec() con PHP?

Lo script My Python utilizza NTLK per trovare nomi propri. Comando di esempio:

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

rendimenti [London] quando l'eseguo da cmd, ma genera un errore in Apache log quando si esegue lo stesso comando da exec() .La script è sicuramente sempre run OK - se cambio lo script python essere print "Hello World" che viene restituito bene.

so che è un grande chiedere a chiunque di sapere come risolvere questo errore NLTK, ma ho potuto davvero fare con tutti gli indicatori sul motivo per cui l'esecuzione da exec è diverso da cmd. (Il comando è identico).

Sto eseguendo WAMP su Windows 7 con Apache 2.2.11.

Ecco l'errore nel log di 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' 
********************************************************************** 

risposta

2

Il server web probabilmente viene eseguito con altri privilegi di te. Possibili problemi:

  • Autorizzazione percorso/file: l'utente del server Web può accedere ai file necessari?
  • Ambiente diverso: sono tutte le variabili di ambiente necessarie (PATH, roba specifica per Python, ...) impostata?
  • Configurazione: ci sono configurazioni per utente per Python o il modulo?

Suggerimento: eseguire set sia nel prompt dei comandi e dal processo di PHP e controllare le differenze.

30

È necessario eseguire nltk.download() e scegliere "maxent_treebank_pos_tagger". È necessario creare uno script Python e inserire:

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

quindi eseguirlo dalla riga di comando. Installerà i file di dati per i tagg di POS, che non sono ancora stati installati.

Dopo aver eseguito questa operazione, dovrebbe funzionare.

+0

Volevo solo sottolineare che poiché è Python, non avrete bisogno di un punto e virgola alla fine della seconda riga. – Gaurang

0

Dalla shell/terminale, è possibile utilizzare:

sudo python -m nltk.downloader maxent_treebank_pos_tagger 

Installerà maxent_treebank_pos_tagger (cioè il tagger treebank POS standard NLTK).

Problemi correlati