Python脚本无法从PHP exec()执行

时间:2013-03-24 03:43:58

标签: php python

我有一个简单的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!";
   }

4 个答案:

答案 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;);