Python Script über Webbrowser

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Moin,
ich versuche ein Python Script, das eine kamera auslößt, das Bild herunterlädt und auf der Kamera löscht, über den Webbrowser des Pi's zu starten. Wenn ich das Script ganz normal über

Code: Alles auswählen

sudo python script.py
starte, funktioniert alles. Als ich jetzt aber probiert habe über eine php datei das Script zu starten

Code: Alles auswählen

system("sudo python script.py")
, lädt er die Bilder nicht herunter und nach 5 Bildern ist die Kamera Busy. Das alles funktioniert einwandfrei wenn ich es nicht über das php Script mache. Ich muss es aber über den Browser starten.
Was könnte das Problem sein?
MFG
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

Niemand muß etwas über PHP-Skripte machen. Ich habe z.B. seit über 10 Jahren kein PHP mehr ernsthaft verwendet. Warum muß das Programm über sudo gestartet werden? Stimmen die Verzeichnisse? Welche Fehlermeldungen gibt es?
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Verzeichnisse passen. Fehlermeldungen gibts keine. Wenn ich die php Datei mit php in der Konsole ausführe, funktioniert es. Nur nicht über den Browser. In der php Datei ist auch ein Header angeben zur index.php. Das klappt aucht. Nur nicht der system Befehl.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Wie soll ich denn deiner Meinung nach ein Python Script mit einem Button auf einer Website ausführen?
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

Nochmal die Frage: Warum muß das Programm über sudo gestartet werden?
Der Webserver läuft ja hoffentlich nicht als Nutzer, der sudo ausführen darf. Und da gibt es natürlich eine Fehlermeldung, man muß sie nur ausgeben.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Es muss nicht über sudo gestartet werden. Hautpsache es wird überhaupt gestartet.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Wie gebe ich die Fehlermeldung denn aus? Ich bin noch nicht so lange dabei, sorry.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Ich habe mit jetzt mit ini_set('error_reporting'. E_ALL); die Fehlermeldungen anzeigen lassen. Keine da.
Wenn ich das script mit php script.php ausgühre, alles wurderbar. Wenn ich es über den Browser aufrufe localhost/script.php (das script liegt im richtigen Ordner dafür), passiert nix, außer das ich auf einer weißen Seite lande.
Ich lasse in dem Php Script auch eine Datei schreiben. Das klappt auch einwandfrei.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Werd mal www-Data user (zb mit sudo su www-data) und führ DANN dein Python Skript aus.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Ohne sudo access to /dev/mem. try running as root!
Mit sudo gehts.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das es ohne sudo geht ist nicht verwunderlich. Mit sudo hätte ich bei www-Data ein Passwort erwartet. Du musstest aber keines eingeben?
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Nein, ich habe mich so angemeldet: sudo su -l www-data -s /bin/bash
Bei sudo su www-data wurde gesagt: thus account is currently not available.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Danach warst du www-Data? Das hat ‚id‘ zb ergeben? Und DANN geht dein Python Skript?
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Die Eingabe sieht wie folgt aus:
www-data@raspberrypi:~/html$ sudo python script.py
Ja dann klappt es. Habe es auch mit einem 2. anderen Script probiert klappt auch.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hm. Dann hab ich keine Idee mehr.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Sirius3 hat geschrieben: Samstag 2. Juni 2018, 15:11 Niemand muß etwas über PHP-Skripte machen.
Welche möglichkeit gibts denn ein Python Script mit einem Button zu starten?
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst in deinem Python Skript einen Webserver starten, und den mit dem Browser ansteuern.

Beispiele gibt es da viele, zb mit bottle oder flask als webframework.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Gibt es auch eine andere Möglichketi? Ich habe nämlich noch ein paar andere Seiten auf dem Server auf denen man die Parameter eingibt usw. und ich würde das jetzt ungern alles nochmal abändern, es sei denn es gibt keine andere Methode.
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Prinzipiell muss das gehen über PHP. Warum das jetzt nicht klappt kann ich so auch nicht sagen - ich bin nicht auf dem laufenden, was zB der Apache für Limitierungen an seine Prozesse anlegt. Und da muss es ja irgendwie dran liegen. Ich würde da nochmal tiefer in die Logs starren.

Das ganz generell ist dein Ansatz, per System zu arbeiten ziemlicher Mist. Denn damit bist du IMMER darauf angewiesen, dass der Browser rechtzeitig was macht. Wenn der Benutzer den Browser schließt, und dein Skript gerade die Turbine auf Vollgas gedreht hat, dann bleibt das so lange so, bis es kracht.

Darum ist es eh besser, das Skript dauerhaft laufen zu lassen, und damit zu kommunizieren. ZB per socket. Oder eben sogar HTTP. Es läuft also endlos, und bekommt per HTTP Befehle, was es tun soll. Ob die direkt aus dem Browser kommen, oder zb via PHP und CURL ist egal.

Aber so kannst du dann zb Timeouts ablaufen lassen, und die Turbine wieder abschalten. Oder auch nur die Plumpsklobeleuchtung. Eigentlich kommt fast nichts ohne Timer aus.
Juzu
User
Beiträge: 18
Registriert: Samstag 2. Juni 2018, 13:39

Ist es wirklich sinnvoll bzw. notwendig städig zu kommunizieren? Der Webserver soll nur die Daten in eine Datei speichern (klappt) und dann das script starten wenn ich den Knopf drück. Dann soll nur noch eine Seite mit script läuft angezigt werden was ich mit einer php abfrage in der index mache, indem ich eine Datei lese in der entweder running oder nix steht. Dann hat sich alles gegessen. Der Raspberry pi steht für ein paar Stunden irgendwo rum und macht eine Timelapse mit dem script. Fertig. "Mehr" solls nicht werden.
Antworten