Programm Python via PHP Starten ? Problem !

  • Hallo zusammen ich hab mal wieder eine Frage bei der ich etwas hilfe benötige .


    ich habe einen Raspi 3 mit apache2 und php

    auf diesen 2 python programme diese laufen auch ordenlich beim start über konsole zb


    sudo python test1.py


    ich habe mir ein mini interface gebaut bez. bin drüber .


    einmal die funktion den raspi neu zu starten und eben das besagte programm ( dies mach ich mit start_Stop.sh )

    script leg ich dann mit bei

    das ganze python programm ist für meine solar anlage


    mein problem ist wenn ich es starte über meinen Browser (php) dann läd die seite ewig und macht nichts mehr , obwohl der prozess ausgeführt wurde

    was kann ich da machen =?


    code von meiner config.php (includet datei)

    PHP
    1. <?php
    2. if (isset($_POST['solar']))
    3. {
    4. shell_exec("sudo /home/pi/./solar.sh");
    5. }
    6. ?>

    Code von meiner solar.php

    Code
    1. <center>
    2. <form method="post">
    3. <button name="solar">solar-Neustart</button><br>
    4. <a href="index.php?page=ausloggen">
    5. Ausloggen
    6. </center>

    und hier noch die solar.sh die python killt und eben das programm neustartet

    Shell-Script
    1. #!/bin/bash
    2. sudo killall python
    3. sleep 5
    4. clear
    5. cd /home/pi
    6. sudo python solarsteuerung.py &
    7. sleep 15
    8. exit


    könnt ihr mir helfen ?


    wenn ich den Browser schliese und neu öffne und mich neu einlogge auf meiner seite dann geht wieder alles

    aber auch nur dann wenn ich ohne browser schliesen das mach dann läd die seite ewik und es passiert nix


    lg aus nbg

  • Du hast allein schon 20 Sekunden "Warten" in den Python-Skripten eingebaut, dazu kommt noch das beenden und neustarten von Python und dem Skript.


    Ich verstehe auch nicht unbedingt den Sinn hinter den sleeps , da laut PHP-Dokumentation ein Exitcode oder eine Ausgabe bei Ausführen von shell_exec bzw. exec übergeben wird und somit eigentlich die Ausführung des Skriptes abgewartet wird (oder zumindest bis ein return-Value vorhanden ist).


    Hast du die Ausführung ohne die sleep Zeilen in deinem Bashskript mal ausprobiert?

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Es ist relativ unpraktikabel, ein PHP Script zu verwenden um ein Bash Script auszuführen welches wiederum ein Python Script ausführt.


    Hinzu kommt dass du das bash Script bereits über sudo ausführst, somit ist es überflüssig im bash Script dann noch mal sudo zu verwenden. Und das "clear" setzt dem ganzen noch ne Krone auf :fies:


    Das gesamte Konzept ist brüchig und extrem Fehleranfällig.


    Da du offensichtlich primär Python Scripts ausführen willst solltest du lieber den Webserver auch auf Python Basis verwenden, und führst dann nur Funktionen/Klassen des solarsteuerung.py Scripts aus



    [Python] Anleitung: Webserver, Websocket und ein bisschen AJAX

  • Solltest du den Webserver nur für diese Anwendung brauchen, hat meigrafd da absolut recht.

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Auch für alles andere ist ein Python Webserver besser :fies: Hat man sich erst mal eingearbeitet lassen sich viel mehr Sachen damit leicht umsetzen als es mit Apache&Co möglich ist. Hinzu kommt das "bottle" eigentlich sehr leicht zu verstehen und anzuwenden ist


    Einziges Problem: Seit dem Umzug des Forums auf eine andere Foren-Software sind viele Threads/Anleitungen hier kaputt - es wird aber daran gearbeitet, hoffe ich zumindest ;)

  • Auch für alles andere ist ein Python Webserver besser :fies: Hat man sich erst mal eingearbeitet lassen sich viel mehr Sachen damit leicht umsetzen als es mit Apache&Co möglich ist. Hinzu kommt das "bottle" eigentlich sehr leicht zu verstehen und anzuwenden ist


    Einziges Problem: Seit dem Umzug des Forums auf eine andere Foren-Software sind viele Threads/Anleitungen hier kaputt - es wird aber daran gearbeitet, hoffe ich zumindest ;)


    Na ja, wenn ich 98 % Stock-PHP-Software laufen lasse (nextcloud, WordPress, ...), dann ist es gerade am Anfang einfacher Hilfen und Tools für nginx, lighty und Co. zu bekommen :)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Hallo zusammen ,
    erstmal danke für die infos .


    ich habe es noch nicht ohne sleep´s probiert , diese habe ich eigentlich eingebaut , damit der pi auch die möglichkeit hat zu verschnaufen , und weil ich 2 weitere python programme am laufen habe . die ebenfalls im shell script eingebunden sind


    der tipp mit dem überflüssigen sudo , das dachte ich mir schon fast :/


    die shell scripte brauch ich ja dann auch nicht mehr wenn ich mir eeinen webserver via python baue ? richtig

    also ich arbeite eigentlich auch nur mit python scripten , wenn die steuerung über einen python websocket besser wäre , dann werd ich mich diesbezüglich mal einlessen .. ist es da dann auch möglich einzellne prozesse nur zu killn ?


    also python prozesse


    und wie sieht es dann aus mit dem hängen des browsers aus?

    wäre das problem dann auch gelöst ?


    liebe grüße aus nürnberg

  • Nur kurz zum "Hängen" des Browsers:


    Das hört sich für mich danach an, dass die Antwort des Servers abgewartet wird - und diese Antwort beinhaltet deinen ganzen Code-Pfad. Sprich: der wartet wohl oder übel, bis er mit dem ganzen Code durch ist und dann kommt die Ausgabe. Das kann schnell auch mal in irgendwelche Timeouts des Browsers/Servers laufen, wenn man Pech hat :-/.

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.