从命令行运行脚本与用PHP的exec()运行脚本有什么区别?
我正在尝试通过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,看看有什么不同。