Я нуб с малиновым пи. У меня есть все настройки, и я пытаюсь запустить файл через браузер, используя 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
Я пытаюсь запустить файл через браузер, используя команду 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 RuntimeError: Нет доступа к / dev / mem. Попробуйте запустить как root!
По умолчанию для интерфейса GPIO Raspberry Pi требуются права суперпользователя («root»). У вас может быть открыта оболочка пользователя root, поэтому выполнение сценария Python работает без проблем из командной строки. Принимая во внимание, что ваш сервер приложений PHP, скорее всего, работает от имени другого пользователя.
Наиболее простым решением является добавление пользователя сервера приложений PHP (например, www-data
) чтобы /etc/sudoers
, который создаст привилегированного пользователя.
www-data ALL = NOPASSWD: ALL
А затем увеличить ваши разрешения с sudo
:
shell_exec("cd /home/pi/ && sudo ./trigger_pin.py 2>&1");
Если вы сделаете это, убедитесь, что вы проверяете безопасность работы вашего веб-сервера (то есть не устанавливайте вслепую веб-скрипты с просмотром исходного кода).
Кроме того, вы можете изменить свой скрипт Python для использования pigpio«s pigpiod
демон, который работает с привилегиями суперпользователя (так что ваше приложение не должно). Или вы можете использовать отдельный инструмент, который использует setuid
запускаться с правами root, такими как Quick2Wire GPIO Admin.
Вы также можете найти больше помощи на Raspberry Pi Stack Exchange.
Используйте эту команду
$ sudo python filename.py