2010-02-18 14 views
6

PHP içinden exec() kullanarak bir Python betiği çalıştırmaya çalışıyorum. Komutum, cmd penceresini kullanarak doğrudan çalıştırdığımda iyi çalışır, ancak PHP'de exec()'dan çalıştırdığımda bir hata üretir.Komut satırından komut dosyası çalıştırma ve PHP ile exec() arasındaki fark nedir?

Python kodumda, düzgün isimler bulmak için NTLK kullanır. Örnek komut:

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

döner ben hayranlarıyla komut defintely çalışma OK oluyor exec() aynı komutu çalıştırdığınızda log cmd onu çalıştırmak Apaçilerleydi hata veren [London] - Python komut dosyası değiştirirseniz print "Hello World" olması iyi olur.

Bu NLTK hatasını nasıl düzelteceğinizi bilmek gerçekten büyük bir istek olduğunu biliyorum, ancak exec numaralı telefonu neden çalıştırmanın cmd numaralı telefona göre farklı olduğunu söyleyebilirim. (Komut aynıdır).

Windows 7'de WAMP'ı Apache 2.2.11 ile çalıştırıyorum.

İşte Apaçi günlüğüne hata var:

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

cevap

2

Web sunucusu olasılıkla kendinden başka ayrıcalıklarla çalışır. Olası sorunlar şunlardır:

  • Yol/dosya izni: Web sunucusu kullanıcısı gereken dosyalara erişebilir mi?
  • Farklı ortamlar: gerekli tüm ortam değişkenleri (PATH, Python'a özel şeyler,…) ayarlanmış mı?
  • Yapılandırma: Python veya modül için kullanıcı başına yapılandırma var mı?

İpucu: hem komut isteminde ve PHP sürecinden set yürütmek ve farklılıkları kontrol edin.

30

nltk.download()'u çalıştırmanız ve 'maxent_treebank_pos_tagger' seçeneğini seçmeniz gerekir. Bir piton komut dosyası yapmak ve içine koymak gerekir: o zaman

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

komut satırından çalıştırın. Henüz yüklememiş olduğunuz POS etiketleri için veri dosyalarını yükleyecektir.

Bunu yaptıktan sonra çalışmalıdır.

iskelet/terminalinden
+0

Sadece Python olduğu için, ikinci satırın sonunda bir yarım virgül kullanmaya gerek olmadığını belirtmek istedim. – Gaurang

0

, kullanabilirsiniz:

sudo python -m nltk.downloader maxent_treebank_pos_tagger 

Bu maxent_treebank_pos_tagger (NLTK, yani standart bir ağaç yapılı POS tagger) yükler.