我是树莓派的菜鸟。我已完成所有设置,我正在尝试使用 shell_exec 通过浏览器运行文件。
这是python文件的内容:
#! /usr/bin/python
import time
import RPi.GPIO as GPIO
PIN_17 = 17 # Define LED colour and their GPIO pin
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_17, GPIO.OUT) # Setup GPIO pin
GPIO.output(PIN_17, True) #Turn on
time.sleep (1) #Wait
GPIO.output(PIN_17, False) #Turn off
GPIO.cleanup() #Useful to clear the board
我在目录 /home/pi/ 中有一个名为 trigger_pin.py 的文件
我正在尝试使用下面 remote.php 中的 PHP 命令通过浏览器运行该文件:
<?php
$output = shell_exec("cd /home/pi/ && ./trigger_pin.py 2>&1"); //run command
echo "$output"; //output from command
?>
我得到的输出是:
Traceback (most recent call last): File "./trigger_pin.py", line 9, in GPIO.setup(PIN_17, GPIO.OUT) # Setup GPIO pin RuntimeError: No access to /dev/mem. Try running as root!
请您参考如下方法:
默认情况下,Raspberry Pi 的 GPIO 接口(interface)需要 super 用户(“root”)权限。您可能打开了一个 root 用户 shell,因此执行您的 Python 脚本不会出现命令行问题。然而,您的 PHP 应用程序服务器可能以另一个用户身份运行。
最直接的解决方案是将 PHP 应用程序服务器的用户(例如,www-data)添加到 /etc/sudoers,这将创建一个特权用户.
www-data ALL = NOPASSWD: ALL
然后使用 sudo 升级您的权限:
shell_exec("cd /home/pi/ && sudo ./trigger_pin.py 2>&1");
如果您这样做,请绝对确定您验证了您的 Web 服务器可以执行的内容的安全性(即,不要通过查看源代码盲目安装 Web 脚本)。
或者,您可以重构 Python 脚本以使用 pigpio的 pigpiod 守护进程,它以 super 用户权限运行(因此您的应用程序不必这样做)。或者您可以使用一个单独的工具,它使用 setuid 以 root 身份运行,例如 Quick2Wire 的 GPIO Admin .
您还可以在 Raspberry Pi Stack Exchange 找到更多帮助.
