无法访问/ dev / mem。尝试在Raspberry Pi上以root身份运行

时间:2015-01-09 16:19:19

标签: php python raspberry-pi shell-exec

我是覆盆子pi的Noob。我已完成所有设置,并且我尝试使用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
?>

我得到的输出是:

  

回溯(最近一次调用最后一次):文件“./trigger_pin.py”,第9行,在GPIO.setup中(PIN_17,GPIO.OUT)#Setup GPIO pin RuntimeError:无法访问/ dev / mem。尝试以root身份运行!

2 个答案:

答案 0 :(得分:4)

默认情况下,Raspberry Pi的GPIO接口需要超级用户(&#34; root&#34;)权限。您可能打开了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脚本以使用pigpiopigpiod守护程序,该守护程序以超级用户权限运行(因此您的应用程序不必这样做)。或者,您可以使用单独的工具,使用setuid以root用户身份运行,例如Quick2Wire GPIO Admin

您还可以在Raspberry Pi Stack Exchange找到更多帮助。

答案 1 :(得分:-1)

使用此命令

$ sudo python filename.py