我是一个树莓派菜鸟。我已经完成所有设置,我正在尝试使用浏览器通过浏览器运行文件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/
called trigger_pin.py
我正在尝试使用下面的 PHP 命令通过浏览器运行该文件remote.php
:
<?php
$output = shell_exec("cd /home/pi/ && ./trigger_pin.py 2>&1"); //run command
echo "$output"; //output from command
?>
我得到的输出是:
回溯(最近一次调用最后一次):文件“./trigger_pin.py”,第 9 行,在 GPIO.setup(PIN_17, GPIO.OUT) # 设置 GPIO 引脚运行时错误:无法访问 /dev/mem。尝试以 root 身份运行!
默认情况下,Raspberry Pi 的 GPIO 接口需要超级用户(“root”)权限。您可能打开了 root 用户 shell,因此从命令行执行 Python 脚本不会出现问题。然而,您的 PHP 应用程序服务器可能以另一个用户身份运行。
最直接的解决方案是添加 PHP 应用程序服务器的用户(例如,www-data
) to /etc/sudoers
,这将创建一个特权用户。
www-data ALL = NOPASSWD: ALL
然后升级您的权限sudo
:
shell_exec("cd /home/pi/ && sudo ./trigger_pin.py 2>&1");
如果您这样做,请绝对确定您验证了 Web 服务器可以执行的内容的安全性(即,不要在检查源代码的情况下盲目安装 Web 脚本)。
或者,您可以重构 Python 脚本以使用pigpio http://abyz.co.uk/rpi/pigpio/'s pigpiod
守护进程,它以超级用户权限运行(因此您的应用程序不必这样做)。或者您可以使用一个单独的工具来使用setuid
以 root 身份运行,例如 Quick2WireGPIO 管理 https://github.com/quick2wire/quick2wire-gpio-admin.
您还可以在以下位置找到更多帮助Raspberry Pi 堆栈交换 http://raspberrypi.stackexchange.com.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)