6

我有一个简单的 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

4 回答 4

13

你必须python为你的文件使用完整路径。您可能会从命令中找到前者which python,最有可能输出 '/usr/bin/python' 并且您应该已经知道后者。所以你的命令看起来像这样:

$mystring = exec('/usr/bin/python /home/user/testing.py');

并且您应该确保您的 python 脚本具有所有适当的权限,因为您的网络服务器很可能以不同的用户身份运行,因此权限应该是“-rwxrwxr-x”或类似的东西。

于 2013-03-24T03:59:30.787 回答
1

尝试使用 python 程序的确切路径。

$mystring = exec('python testing.py');
于 2013-03-24T03:45:56.663 回答
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);
}
于 2013-03-24T03:50:53.973 回答
0

exec() 或任何东西都没有问题。
问题是 nltk 模块无法找到 nltk_data 目录。对于它,只需找到系统中存在 nltk_data 的位置:通常是 ~/nltk_data。
现在在运行函数时导入添加该路径。
导入nltk;
现在,nltk.data.path 是搜索模块的位置列表。
你可以只做 nltk.data.path.append("your location/directory");

于 2014-07-01T14:30:51.803 回答