Problem: Python über PHP ausführen

Ein neuer Artikel wurde veröffentlicht
  • Hallo zusammen,

    ich habe ein Python-Skript zum Anschalten meiner LEDs geschrieben


    dieses wollte ich über eine Internetseite mit einem Webserver über PHP ausführen.


    Dazu habe ich als erstes im sudoers.tmp dem Benutzer www-data die sudo-Rechte für das Python-Skript gegeben.

    Code
    1. www-data ALL=(ALL) NOPASSWD: /usr/bin/python /home/pi/ledon.py

    Dann habe ich eine PHP Datei erstellt:


    PHP
    1. <?php
    2. echo "ON:)";
    3. echo shell_exec("sudo python /home/pi/ledon.py");
    4. ?>

    Und wenn ich das dann im Browser öffne, passiert nichts. Kann mir jemand helfen?


    LG Malte

  • :wallbash::@:baeh2::-/:no_sad::mad_GREEN::stumm::motz::warn::fluchen::kotz:


    Bitte, man beantworte mir die Frage: Welcher Vollidiot ist auf die Kombination PHP+Python gekommen?


    Malte12345 bitte verwende die Forensuche. Dieses leidige Thema ist absolut broken by design, aber wir hatten schon Trillionen dieser Fragen (genau dieser). Also bitte such und lies. :danke_ATDE:


    Edit: und was willst du damit bezwecken?

    0L

    Das ist ein Python 2 Long, die Zeilen haben keinen Effekt und Longs verwendet man in Python schon lange nicht mehr...

  • Hallo,


    Malte12345 : was linusg im Beitrag #2 sagen möchte


    Das Zusammenspiel PHP+Python ist nicht gerade ein "Dream-Team" und auch nicht nötig weil:

    • Python ist mindestens genau so gut (eher besser) für webbasiert Applikationen geeigent wie PHP
    • Wenn du den Webteil mit einem Python Webframework wie Bottle oder Flask umsetzt, kann du direkt auf den GPIO-Skript zugreifen, ohne "Reibungsverluste"
    • weitere Vorteile von Python: du brauchst keinen Webserver via Apacher Lighthttp oder nginx (=weniger Ressourcenverbrauche)
    • weitere Verteil von Python: du bist wesentlich flexibler beim Deployment


    Wenn der oben genannte PHP Code alle ist, dann wirf' ihn weg und mach' das mit Python unter Einsatz von Bottle (oder Flask). Dazu gibt es gefühlt 100 Threads hier im Forum.


    Gruß, noisefloor

  • Hallo Malte !


    Wenn Du unbedingt das File /home/pi/ledon.py (das dem User pi gehört), durch den User www-data

    ausführen lassen willst, kannst Du www-data in die ACL (siehe < man acl > ) des ledon.py eintragen. Den sudoers Eintrag würde ich gleich mal löschen.


    setfacl -m u:www-data:rwx /home/pi/ledon.py oder

    setfacl -m u:www-data:rw /home/pi/ledon.py würde das erledigen.


    Mit getfacl /home/pi/ledon.py kannst Du den Eintrag überprüfen.



    Servus !

  • Dazu habe ich als erstes im sudoers.tmp dem Benutzer www-data die sudo-Rechte für das Python-Skript gegeben.

    Code
    1. www-data ALL=(ALL) NOPASSWD: /usr/bin/python /home/pi/ledon.py

    Dann habe ich eine PHP Datei erstellt:


    PHP
    1. <?php
    2. echo "ON:)";
    3. echo shell_exec("sudo python /home/pi/ledon.py");
    4. ?>

    In visudo trägt man nur den Befehl ein, der über sudo ohne Passwordabfrage, erlaubt werden soll - nicht auch noch mögliche Übergaben. Du führst den Befehl "/usr/bin/python" aus und übergibst diesem direkt die Scriptdatei..

    Desweiteren trennt man mehrere Befehle in visudo über ein Komma ( , )


    Dh der visudo Eintrag ist fehlerhaft und funktioniert deshalb nicht.


    Ergänzend zu den bisherigen Kommentaren hier, ließ dir mal folgende Links durch:

    FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)

    FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX