我试图从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正在显示按钮,但是当我点击它时它什么也没做。
答案 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文件首先使用
使python文件可执行chmod +x /path/to/python-script.py
编辑:
来自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
祝你好运!