Python Script mit PHP Aufrufen.

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
seum90
User
Beiträge: 9
Registriert: Mittwoch 11. November 2020, 08:47

Hallo Ich habe ein Problem.

Vorab:

Raspberry 3B aktuelles Rasbian alles andere auch aktuell.
Auf den PI ist Apache und PHP sowie Python installiert.

Ich habe 2 kleine Programme geschrieben. GPIO_an.py und GPIO_aus.py ganz minimalistisch. Dann gibt es noch eine Index.php die je nach bedingung eines der beiden Programme aufruft.

Wenn ich die beiden Programme über die CMD Aufrufe machen beide was sie sollen. Führe ich die Programme über ein shell_exec in PHP aus funktionieren diese nicht.

Hier mal der PHP Code:

Code: Alles auswählen

<?php
$cmd = shell_exec('python3 GPIO_an.py');
echo $cmd;
?>
Hier der Python Code:

Code: Alles auswählen

import RPi-GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

GPIO.setup(5, GPIO)
GPIO.output(5, GPIO.HIGH)
Alle Dateien befinden sich in /var/www/html/

die py datein habe ich mit sudo chmod 777 gesetzt. sudo chmod -x habe ich auch schon probiert.

im Log steht folgendes:

Traceback (most recent call last):
File "GPIO_an.py", line 7, in <module>
GPIO.setup(5, GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!

Als root geht nicht dann kommt eine Fehlermeldung wegen sudo.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und wie sieht die Fehlermeldung wegen sudo aus?
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

der User unter dem der Apache läuft (müßte, wenn ich mich richtig erinner www-data sein) hat scheinbar keine Rechte um auf die GPIO zuzugreifen. also wenn du es mit sudo machen willst einfach mal versuchen www-data in die sudoers hinzufügen. Bitte aber nur, wenn der Raspi NICHT am Internet hängt ;-)
seum90
User
Beiträge: 9
Registriert: Mittwoch 11. November 2020, 08:47

__deets__ hat geschrieben: Mittwoch 11. November 2020, 09:46 Und wie sieht die Fehlermeldung wegen sudo aus?
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified
seum90
User
Beiträge: 9
Registriert: Mittwoch 11. November 2020, 08:47

paddie hat geschrieben: Mittwoch 11. November 2020, 09:53 der User unter dem der Apache läuft (müßte, wenn ich mich richtig erinner www-data sein) hat scheinbar keine Rechte um auf die GPIO zuzugreifen. also wenn du es mit sudo machen willst einfach mal versuchen www-data in die sudoers hinzufügen. Bitte aber nur, wenn der Raspi NICHT am Internet hängt ;-)
Habe den user www-data zur Gruppe sudo hinzugefügt und apache neu gestartet. Fehlermedung kommt weiterhin mit sudo im LOG
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

In dem Fall möchte sudo ein Passwort haben, hat aber kein Möglichkeit danach zu fragen.

In deinem Fall brauchst, oder eher willst, du ja keine Passwortabfrage also in sudoers ein nopasswd hinter dem betreffenden user setzen und sudo mit -t aufrufen.
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

@seum90: NEIN, bitte nicht www-data zur Gruppe sudo hinzufügen. Damit reißt Du Dir riesige Sicherheitslücken auf.
Du mußt in /etc/sudoers dieses eine spezielle Programm erlauben, aber ohne Passwort:

Code: Alles auswählen

www-data ALL=(root:ALL) NOPASSWD:/home/.../gpio_an.py
Das muß dann natürlich auch ausführbar sein (Shebang-Zeile nicht vergessen). In /var/www/html/ hat ein Programm gar nichts verloren.
Dein Programm an sich läuft aber noch gar nicht. `import RPi-GPIO` ist keine gültige Syntax.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Sirius3 hat geschrieben: Mittwoch 11. November 2020, 10:28 Du mußt in /etc/sudoers dieses eine spezielle Programm erlauben, aber ohne Passwort
Auch das würde ich eher lassen, da dieses Pythonskript, das im Root des Webservers liegt, trotzdem root-Rechte hätte, die nicht nötig sind.


@seum90 Es wurde zwar schon geschrieben, aber das ist wichtig: Schmeiß den User www-data wieder aus der Gruppe sudo raus, der hat dort nichts zu suchen!

- Ändere die Rechte vom Python-Skript wieder in 755. (Ich hoffe Du hast nicht auch an anderen Rechten rumgeschraubt!)
- Schieb den User www-data in die Gruppe gpio:

Code: Alles auswählen

sudo usermod -aG gpio www-data
- Dann starte den Apache neu:

Code: Alles auswählen

sudo service apache2 restart
und versuchs nochmals!

Btw: Sieh Dir statt RPi.GPIO mal gpiozero an!
Alles was wir sind ist Sand im Wind Hoschi.
seum90
User
Beiträge: 9
Registriert: Mittwoch 11. November 2020, 08:47

Hallo,

erst mal sorry das ich mich erst jetzt wieder melde, aber ich musste erst noch andere Sachen erledigen. Zudem musste ich den Raspi neu aufsetzten da ich so viele Schreibrechte in den letzten Tagen geändert hab auch der Suche nach dem Fehler :)

Noch dazu hatte ich mir /etc/sudoers zerschossen da ich visudo nicht kannte :-)

@hyle: Du hattest recht. Wenn ich den user www-data zu gpio hinzufüge funktioniert es:)

Was bringt gpiozero für Vorteile mit sich gegenüber RPI?

Danke für eure Hilfe :)

EDIT:

OK die Frage mit den Vorteilen hat sich erledigt. gpiozero macht es am Anfang schon sehr einfach :)
Antworten