2015-01-09 45 views
1

我是樹莓派的Noob。我已經安裝了所有設備,並且正在嘗試使用shell_exec通過瀏覽器運行文件。無法訪問/ dev/mem。嘗試以root用戶身份運行Raspberry Pi

這裏是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

我想用下面的PHP命令來運行通過瀏覽器的文件remote.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!

回答

4

默認情況下,樹莓派的GPIO接口需要超級用戶(「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,該守護程序以超級用戶權限運行(所以您的應用程序不必)。或者,您可以使用單獨的工具,該工具使用setuid以root身份運行,例如Quick2Wire的GPIO Admin

您還可以在Raspberry Pi Stack Exchange找到更多幫助。

0

使用此命令

$ sudo python filename.py 
+0

OP不是從命令行中運行這個,從從Web應用程序調用的腳本,而exec'ing。 –

相關問題