Обновить:
после консультации в комментариях я нашел свой error.log (/var/log/apache2/error.log):
Traceback (most recent call last):
File "/var/www/html/nano.py", line 7, in <module>
GPIO.setup(17,GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
Я решил свою проблему, добавив sudo:
<?php
echo exec("sudo /usr/bin/python /var/www/html/nano.py");
?>
но я до сих пор не понимаю этого.
Мне нужно запустить его как sudo, когда я вызываю nano.py с моего веб-сервера, но когда я запускаю nano.py из моего терминала (как пользователь pi), мне не нужно запускать его как sudo.
Я думал, что я дал доступ к корню Apache, когда я редактировал sudoers.
Кто-нибудь, кто может объяснить это?
и это безопасно? (мой сервер apache пока доступен только из моей собственной сети Wi-Fi)
Я знаю, что на этот вопрос задавали и отвечали много раз, но я попробовал каждое решение, которое смог найти, но я все еще не могу выполнить свой script.py с моей веб-страницы PHP.
Я могу выполнить свой скрипт nano.py из терминала:
Мой сервер Apache также работает нормально (я могу отображать текст, если я хочу)
скрипт nano.py:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
print "LED on"GPIO.output(17,GPIO.HIGH)
time.sleep(1)
print "LED off"GPIO.output(17,GPIO.LOW)
У меня есть сценарий Python под названием nano.py, расположенный по адресу:
/var/www/html/nano.py (-rwxrwxrwx 1 pi www-data 236 26 января, 13:12 nano.py)
а также
/home/pi/nano.py (-rwxr-xr-x 1 пи пи 225 26 января 13:19 nano.py)
сценарии одинаковы:
<?php
echo shell_exec("python /var/www/html/nano.py");
?>
Я пробовал много вещей, но я не могу выполнить nano.py со своей страницы PHP:
Я попытался дать доступ к Apache sudo:
www-data ALL=(ALL) NOPASSWD:ALL
Я действительно не знаю, какие у меня есть варианты,
Поэтому я надеюсь, что кто-то может мне помочь.
Пытаться
<?php
echo shell_exec("/usr/bin/python /var/www/html/nano.py");
?>
Скорее всего, ваш двоичный файл Python не может быть найден. Также убедитесь, что эти функции не заблокированы вашим php.ini.
Если это не сработает, /var/log/apache2/error.log может рассказать вам больше об ошибке.
Сервер tomcat, скорее всего, работает под учетной записью «tomcat». Вероятно, поэтому вам нужна команда sudo.