我有一个简单的PHP函数,它应该在调用时执行Pyton脚本。我在我的php程序中多次尝试过这种函数,但不知怎的,这次函数根本没有执行python脚本。当我从命令提示符访问脚本并运行python testing.py
时,它成功执行。有一件事我想提一下,这个脚本有一些严格的python的NLTK库实现,并且执行和执行其操作(即数据处理和存储到db)需要20多秒。执行中的延迟导致了这个问题,还是这次我还缺少其他的东西?
function success(){
$mystring = exec('python testing.py');
$mystring;
if(!$mystring){
echo "python exec failed";
}
else{
echo "<br />";
echo "successfully executed!";
}
答案 0 :(得分:8)
您必须使用python
和文件的完整路径。你可以从which python
命令中找到前者,最有可能输出'/ usr / bin / python',你应该已经知道了后者。所以你的命令看起来像这样:
$mystring = exec('/usr/bin/python /home/user/testing.py');
并且你应该确保你的python脚本具有所有适当的权限,因为你的web服务器很可能是以不同的用户身份运行的,所以权限应该是“-rwxrwxr-x”或者关闭的东西。
答案 1 :(得分:1)
尝试使用python程序的确切路径。
$mystring = exec('python testing.py');
答案 2 :(得分:0)
尝试删除$mystring;
行
function success() {
$mystring = exec('python testing.py');
if(!$mystring){
echo "python exec failed";
} else {
echo "<br />";
echo "successfully executed!";
}
}
出于测试目的,请尝试:
function success() {
$mystring = exec('python testing.py', $output);
var_dump($output);
}
答案 3 :(得分:0)
exec()或其他任何问题都没有。
问题是nltk模块无法找到nltk_data目录。因为它只是找到系统中nltk_data的位置:通常〜/ nltk_data。
现在导入在运行该函数时添加该路径
import nltk;
现在,nltk.data.path是搜索模块的位置列表
你可以做nltk.data.path.append(&#34;你的位置/目录&#34;);