【问题标题】:Cannot Call Python script from PHP无法从 PHP 调用 Python 脚本
【发布时间】:2018-01-15 15:44:54
【问题描述】:

我正在尝试从 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 显示按钮很好,但是当我单击它时它什么也不做。

【问题讨论】:

标签: php python


【解决方案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')

【讨论】:

  • 试过了,没有变化。当我点击按钮时,仍然没有任何反应。
  • 所以我现在在日志中遇到了一些错误。我认为这是权限。 “sudo:未知用户:/home/pi/Desktop/test.py”和“sudo:无法初始化策略插件”这是什么以及如何解决?我运行了 chmod 命令。不知道如何解决该错误。
  • 原因是exec()中没有指定用户名应该是这样"sudo -u &lt;username here&gt; /home/pi/Desktop/test.py"
  • 原因是exec()中没有指定用户名应该是这样"sudo -u &lt;username here&gt; /home/pi/Desktop/test.py"检查更新的答案
  • 所以事实证明这是权限,我不得不编辑 sudoers。我以前试过这个,所以我认为这是别的东西。但是,我输入时出错了。修复了它,一切都很好。
【解决方案2】:

请确保 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

祝你好运!

【讨论】:

  • 请添加更多有用的信息和/或必要的code-sn-ps,或者以更格式化的方式来帮助用户。
  • 我检查了错误日志并没有显示任何内容,只有服务器首次启动时的两个条目,没有其他内容。然后我尝试将权限添加到 /etc/sudoers.依然没有。也许我做错了。如何授予执行脚本的权限?
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多