PHP ile) (komut satırından ve exec bir komut dosyası çalıştıran arasındaki fark nedir?

2 Cevap php

PHP içinde exec () kullanarak bir Python komut dosyasını çalıştırmak çalışıyorum. Ben bir cmd penceresini kullanarak, doğrudan çalıştırdığımda komut çalışıyor, ama ben PHP exec() onu çalıştırdığınızda bir hata üretir.

Benim Python komut NTLK uygun isimler bulmak için kullanır. Komut örneği:

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

I cmd onu çalıştırmak, ama exec() Aynı komutu çalıştırdığınızda Apache günlüğüne bir hata atar döner [London]. komut defintely koşmak oluyor Tamam - Ben python komut dosyası olarak değiştirirseniz print "Hello World" Bu güzel döndürülür.

Ben bu NLTK hatayı düzeltmek için bilmek herkes için istemek büyük olduğunu biliyorum, ama gerçekten exec cmd farklı olan onu çalıştıran neden olarak herhangi bir işaretçiler ile yapabilirdi. (Komutu aynıdır).

Apache 2.2.11 ile Windows 7 üzerinde WAMP koşuyorum.

İşte Apache 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'
**********************************************************************

2 Cevap

Web sunucusu olasılıkla kendinize başka ayrıcalıkları ile çalışır. Olası sorunlar şunlardır:

  • Yol / dosya izni: web sunucusu kullanıcı ihtiyacı dosyalara erişebilirsiniz?
  • Farklı ortamı: tüm gerekli ortam değişkenleri (PATH, Python-spesifik şeyler, ...) ayarlanır?
  • Yapılandırma: Python veya modülü için kullanıcı başına yapılandırmalar var?

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

Sen nltk.download() çalıştırın ve 'maxent_treebank_pos_tagger' seçmek zorunda. Sen bir python komut dosyası yapmak ve bunu koymak gerekir:

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

Daha sonra komut satırından çalıştırın. Bu henüz yüklü olmayan POS tagges için veri dosyalarını yüklemek olacaktır.

Bunu yaptıktan sonra çalışması gerekir.