从命令行运行脚本和从exec()运行PHP有什么区别?

时间:2010-02-18 13:55:51

标签: php python apache exec nltk

我正在尝试使用PHP中的exec()运行Python脚本。当我使用cmd窗口直接运行它时,我的命令工作正常,但是当我在PHP中从exec()运行它时会产生错误。

我的Python脚本使用NTLK来查找专有名词。示例命令:

"C:\Python25\python.exe" "C:\wamp\projects\python\trunk\tests\find_proper_nouns.py" "I went to London this morning" 
当我从[London]运行它时,

返回cmd,但是当我从exec()运行相同的命令时,会在Apache日志中抛出错误。该脚本无法正常运行 - 如果我将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'
**********************************************************************

3 个答案:

答案 0 :(得分:31)

您必须运行nltk.download()并选择“maxent_treebank_pos_tagger”。你必须制作一个python脚本并放在其中:

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

然后从命令行运行它。它将安装尚未安装的POS标签的数据文件。

执行此操作后,它应该可以正常工作。

答案 1 :(得分:2)

您的网络服务器可能使用除您自己以外的其他权限运行。可能的问题包括:

  • 路径/文件权限:Web服务器用户可以访问所需的文件吗?
  • 不同的环境:所有必要的环境变量(PATH,Python特定的东西,......)设置?
  • 配置:是否有Python或模块的每用户配置?

提示:在命令提示符和PHP进程中执行 set 并检查差异。

答案 2 :(得分:1)

从shell /终端,您可以使用:

sudo python -m nltk.downloader maxent_treebank_pos_tagger

它将安装maxent_treebank_pos_tagger(即NLTK中的标准树库POS标记器)。