Quelle est la différence entre l'exécution d'un script à partir de la ligne de commande et de exec () avec PHP?

StackOverflow https://stackoverflow.com/questions/2289046

Question

Je suis en train d'exécuter un script Python en utilisant exec () à partir de PHP. Ma commande fonctionne très bien quand je le lance directement à l'aide d'une fenêtre de cmd, mais il produit une erreur quand je le lance à partir exec() en PHP.

Mon script Python utilise NTLK pour trouver les noms propres. Exemple de commande:

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

retourne [London] quand je le lance à partir cmd, mais génère une erreur dans le journal Apache quand je lance la même commande à partir du script est exec().The obtenir defintely run OK - si je change le script python être print "Hello World" qui est retourné bien .

Je sais qu'il est un grand demander à quiconque de savoir comment résoudre cette erreur de NLTK, mais je ne pouvais vraiment faire avec des pointeurs pour expliquer pourquoi l'exécuter à partir exec est différent de cmd. (La commande est identique).

Je suis en cours d'exécution WAMP sous Windows 7 avec Apache 2.2.11.

Voici l'erreur dans le journal 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'
**********************************************************************
Était-ce utile?

La solution

Votre serveur web fonctionne probablement avec d'autres privilèges que vous. problèmes possibles:

  • Chemin / autorisation de fichier: peut l'accès des utilisateurs du serveur Web les fichiers dont il a besoin
  • environnement différent: sont toutes les variables d'environnement nécessaires (PATH, des choses spécifiques à Python, ...) set
  • ?
  • Configuration: y at-il des configurations par utilisateur pour Python ou le module
  • ?

Astuce:. Exécuter set à la fois l'invite de commande et du processus PHP et vérifier les différences

Autres conseils

Vous devez exécuter nltk.download() et choisissez « maxent_treebank_pos_tagger ». Vous devez faire un script python et le mettre:

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

puis exécutez la ligne de commande. Il installera les fichiers de données pour les POS taggés, que vous n'avez pas encore installé.

Une fois que vous faites cela, il devrait fonctionner.

À partir du shell / terminal, vous pouvez utiliser:

sudo python -m nltk.downloader maxent_treebank_pos_tagger

Il installera maxent_treebank_pos_tagger (à savoir la norme tagger treebank POS dans NLTK).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top