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

7 投票
3 回答
5151 浏览
提问于 2025-04-15 19:26

我正在尝试通过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" 

cmd中运行时返回[London],但在通过exec()运行相同命令时,Apache日志中却出现了错误。脚本确实在运行——如果我把Python脚本改成print "Hello World",那就能正常返回。

我知道要解决这个NLTK错误可能很难,但我真的希望能得到一些关于为什么通过exec运行和通过cmd运行会有不同的提示。(命令是完全一样的。)

我在Windows 7上运行WAMP,使用的是Apache 2.2.11。

这是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 个回答

1

在命令行或者终端中,你可以使用:

sudo python -m nltk.downloader maxent_treebank_pos_tagger

这个命令会安装 maxent_treebank_pos_tagger,也就是NLTK中标准的树库词性标注工具。

31

你需要运行 nltk.download(),然后选择 'maxent_treebank_pos_tagger'。接下来,你要写一个 Python 脚本,在里面放入:

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

然后从命令行运行这个脚本。这样就会安装 POS 标签器所需的数据文件,这些文件你现在还没有安装。

完成这些步骤后,它应该就能正常工作了。

2

你的网页服务器可能和你自己使用的权限不一样。可能会遇到以下问题:

  • 路径/文件权限:网页服务器的用户能否访问它需要的文件?
  • 不同的环境:所有必要的环境变量(比如路径、Python相关的设置等等)都设置好了吗?
  • 配置:Python或模块有没有针对不同用户的配置?

小提示:在命令提示符和PHP进程中都执行 set,看看有什么不同。

撰写回答