php - 树莓派 : Can't execute script. py 来自 PHP

标签 php python raspberry-pi raspbian

更新:

在评论中提出建议后,我找到了我的 error.log (/var/log/apache2/error.log):

Traceback (most recent call last):
File "/var/www/html/nano.py", line 7, in <module>
GPIO.setup(17,GPIO.OUT)
RuntimeError: No access to /dev/mem.  Try running as root!

我通过添加 sudo 解决了我的问题:

<?php
echo exec("sudo /usr/bin/python /var/www/html/nano.py");
?>

但是我还是不明白。 当我从网络服务器调用 nano.py 时,我需要将其作为 sudo 运行,但是当我从终端(作为 pi 用户)运行 nano.py 时,我不必将其作为 sudo 运行。 我以为我在编辑 sudoers 时授予了 apache root 访问权限。

谁能解释一下这个? 这安全吗? (我的 apache 服务器目前只能通过我自己的 wifi 网络访问)

<小时/>

我知道这个问题已经被问过并回答过很多次,但我已经尝试了我能找到的所有解决方案,但我仍然无法从我的 PHP 网页执行我的 script.py。

我可以从终端执行我的 nano.py 脚本: nano.py

我的 apache 服务器也工作正常(如果需要,我可以显示文本)

nano.py 脚本:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
print "LED on"
GPIO.output(17,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(17,GPIO.LOW)

我有一个名为 nano.py 的 python 脚本,位于: /var/www/html/nano.py(-rwxrwxrwx 1 pi www-data 236 Jan 26 13:12 nano.py) 和 /home/pi/nano.py(-rwxr-xr-x 1 pi pi 225 Jan 26 13:19 nano.py) 脚本都是相同的:

<?php
    echo shell_exec("python /var/www/html/nano.py");
?>

我尝试了很多方法,但无法从我的 PHP 页面执行 nano.py:

  • 尝试了不同的路径(/var/www/html/nano.py/home/pi/nano.py nano.py)
  • 尝试过 shell_exec、exec
  • 尝试了不同的 python 路径 (python/usr/bin/python)

我尝试授予 apache sudo 访问权限:

www-data ALL=(ALL) NOPASSWD:ALL

我真的不知道我还有什么其他选择, 所以我希望有人能帮助我。

最佳答案

尝试

<?php
    echo shell_exec("/usr/bin/python /var/www/html/nano.py");
?>

很可能找不到您的 python 二进制文件。还要确保这些功能没有被您的 php.ini 阻止。

如果这不起作用,/var/log/apache2/error.log 可以告诉您有关该错误的更多信息。

关于php - 树莓派 : Can't execute script. py 来自 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016098/

相关文章:

php - 仅当表包含来自不同行的多个所需值时如何从表中获取 ID

php - MySQL GROUP BY 和 ORDER BY DESC

php - Laravel 关系

python - 字符串和整数之间的转换。 Python

php - 编写这个 mysql join 与 google map 地理编码的正确方法是什么?

python - 如何修改类函数中的变量

python - 在Python中按频率对列表列表进行排序

python - 无法通过管道命令访问 django shell 中的导入函数?

debian-based - 如何在运行Debian Squeeze和LXDE的Raspberry Pi上截屏?

c# - HTTPS POST/GET 不适用于 Mono