无法从PHP调用Python脚本

时间:2018-01-13 12:55:05

标签: php python

我试图从PHP调用python脚本但没有运气。我搜索了几个小时但什么也没找到。当我从命令行调用它时,python脚本正常运行(连接到继电器开关,只是通过它们,打开和关闭它们)并且它工作得很好。但是,我似乎无法弄清楚如何从PHP运行它。我是PHP的新手,但我正在使用的是:

<!doctype html>
<head>
    <meta charset="UTF-8"/>
</head>

<?php
    if(isset($_POST['switch'])){
        exec("sudo python /home/pi/Desktop/test.py");
    }
?>

<form method="post">
    <button name="switch">Switch</button>
</form>

</html>

我做错了什么?我无法在任何可以使其工作的地方找到答案。 PHP正在显示按钮,但是当我点击它时它什么也没做。

2 个答案:

答案 0 :(得分:1)

shell_exec - 通过shell执行命令并将完整输出作为字符串返回。 reference

<?php
    if(isset($_POST['switch'])){
      $c=escapeshellcmd("sudo python /home/pi/Desktop/test.py");
      $res=shell_exec($c);
      echo $res; // returns result to display
    }
?>

在您的脚本中,打印的输出似乎无法正常工作

    <?php
        if(isset($_POST['switch'])){
               $s=exec("sudo python /home/pi/Desktop/test.py");
           echo "$s";        
}
    ?>
  

在python脚本的第一行添加解释器的完整路径。如果你安装了多个python版本

     

$s=exec("sudo -u /home/pi/Desktop/test.py");这赋予了python文件

的权限      

首先使用chmod +x /path/to/python-script.py

使python文件可执行

编辑:

来自post

您不能在PHP脚本中使用sudo。 Apache正在从用户运行(www-data generaly),因此编辑此文件:/ etc / sudoers

然后添加以下行:

www-data ALL=(ALL) NOPASSWD:ALL

护理!这将授权所有函数由PHP脚本调用,您可以通过脚本或Python命令调整更改“ALL”。

然后在exec命令中确切用户:

<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py')

答案 1 :(得分:0)

请确保www用户有权执行您的python脚本。

然后你应该检查系统是否可以找到你在python代码中导入的python库的PATH。

我和你有相同的经历,我通过检查apache2 error_log解决了问题,你最好试试,error_log会告诉我们真正的问题是什么!

cd /var/log/apache2
sudo more error.log

chmod 777 test.php
chmod 777 test.py
祝你好运!