Python Skript startet nicht nach drücken des Buttons (php)

  • Hallo zusammen,

    ich habe folgendes Problem:
    Ziel ist es über den Browser im Netzwerk (später evtl. auch übers Internet) ein Python-Skript zu starten, in dem man auf einen Button klickt (und bestenfalls auch noch einen Zahlenwert übergibt, wobei ich mich dieser Aufgabe noch nicht gewidmet habe).
    Es gibt ja unzählige Anleitungen zur php-Programmierung aber nachdem ich nun schon seit einigen Stunden erfolglos die einzelnen Anleitungen durchgehe bin ich schön langsam am verzweifeln.
    Mein bisheriger Code sieht folgendermaßen aus:

    Wenn ich nun auf den Button drücke lädt der Browser kurz und es passiert ansonsten nichts, mit Ausnahme, dass die Anfrage im acces.log erscheint.
    Im error.log jedoch kommt kein Eintrag hinzu.

    Wo ist mein Fehler? :s
    Danke für eure Antwort schon im Voraus.

  • Python Skript startet nicht nach drücken des Buttons (php)? Schau mal ob du hier fündig wirst!

  • Hallo piro,

    auf den ersten Blick... Du solltest die PHP-Abfrage schon vor dem HTML-Text machen.


    und der Code ist abgeschnitten nach margin-right: bzw. name="LED" value="L!
    Bitte zeige nochmal den vollständigen Text.

    Sieh Dir auch mal meigrafd`s Links an!

  • An welcher Stelle in der Datei der php Teil steht ist relativ wurscht - es sei denn er möchte möglichst früh auch eine Ausgabe erzeugen um dann das <form> zu verändern oder so o.ä... Er könnte den PHP Code also auch ganz ans Ende der *.php Datei tun. Das beschreibe ich auch in der oben genannten 1.Anleitung.

    Mine Vermutung geht eher in die Richtung: Der Webserver läuft als "www-data" und hat keine Berechtigung die GPIO's zu schalten... Erneut: Siehe oben genannte Links. Wenn er sowieso nur GPIO's usw steuern möchte wurde es Sinn machen die 3.Anleitung umzusetzen.

  • meigrafd: Im großen Ganzen stimme ich Dir zu: www-data war auch meine Vermutung & die anderen Anleitungen machen auch Sinn (Deshalb der Verweis auf Deine Links!).
    An welcher Stelle der PHP-Code steht ist in dem Falle hier egal und auch dem Interpreter, aber hilft nicht unbedingt die Übersicht zu behalten + man hält sich für eine dynamische Ausgabe ein Hintertürchen offen. ;)

  • [font="Arial"]Danke schon mal für die schnellen Antworten![/font]

    [font="Arial"]Aber entweder verstehe ich immer noch zu wenig von der Materie, oder ich finde nicht das was ich brauche.[/font]
    [font="Arial"]Dass der Code abgeschnitten war ist mir nicht aufgefallen, das tut mir leid ich häng ihn unten nochmal komplett an.[/font]
    [font="Arial"]Das Problem der Zugriffsrechte würde ich jetzt auch mal ausschließen, denn ich habe wie in der Anleitung "PHP Anleitung zum schalten von GPIO" von meigrafd die Rechte mit dem Befehl "[/font][font="Arial"]sudo chown -R www-data:www-data /var/www/html/" freigeschalten. (Oder etwa nicht?)[/font]
    Das nächste ist das, dass ich nicht nur GPIOs ansteuern möchte, sondern ein Python-Skript starten will, das im Folgenden dann selbst läuft (Sensoren ausliest, Ausgänge schaltet, Display ansteuert,...).
    So wie ich das verstanden habe müsste das ja eigentlich mit dem Befehl exec('bash-Befehl') funktionieren?

    PHP
    <html><head><?phpif (isset($_POST['LED']) AND !empty($_POST['LED'])) {if ($_POST['LED'] == "LEDON") {exec("python /var/www/html/led.py"); }}?><title></title></head><body><form method="post"> <table style="width: 75%; text-align: left; margin-left: auto; margin-right: auto;">   <tr>     <th style="text-align: center;">Drücken um LED anzuschalten</th>   </tr>   <tr>     <td style="text-align: center;"><button type="submit" name="LED" value="LEDON">an</button></td>  </tr>  </table></form></body></html>

    Danke


  • Das Problem der Zugriffsrechte würde ich jetzt auch mal ausschließen, denn ich habe wie in der Anleitung "PHP Anleitung zum schalten von GPIO" von meigrafd die Rechte mit dem Befehl "sudo chown -R www-data:www-data /var/www/html/" freigeschalten. (Oder etwa nicht?)

    Nein, damit schaltest du nichts frei. Das einzige was der Befehl macht ist die Besitzrechte zu ändern - das steht aber so auch in der Anleitung.

    Dein Problem ist, dass du unter anderem GPIO's schalten willst - das zumindest besagt "led.py".
    Der Webserver läuft aber als Benutzer "www-data" (und das ist auch gut so), der aber kein Recht hat GPIO's zu schalten.

    ...ich wiederhol mich echt ungerne - deshalb gibts diese Anleitungen wo das alles beschrieben steht...

    Das nächste Problem wäre dann aber auch noch das dein led.py auch noch permanent weiter laufen soll. Auch das wird SO wie du es gemacht hast nix werden, weil das PHP Script so lange blockiert wird bis der exec Befehl beendet wurde. Auch das hab ich mein ich irgendwo beschrieben.

    Es ist aber eigentlich auch der falsche Weg, wenn man primär Python Sachen ausführen will dann über einen Webserver wie apache2 und PHP zu gehen. Wieso setzt du das nicht einfach direkt in Python um?

    Du bist nicht der erste und bestimmt auch nicht der letzte, der mit dem Pi eine Webseite haben möchte um Python Scripts auszuführen, oder um irgendwelche Sensoren auszulesen etc.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!