Python über PHP ausführen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Guten Tage,
    ich versuche gerade ein Python Script über PHP auszuführen, leider ohne erfolg.
    Habe auch hier im Forum einiges darüber gelesen aber es will einfach nicht laufen.

    Mit dieser PHP Datei versuche ich den Python Code(all.py) auszuführen:

    Bekomm es nicht zum laufen. Wisst ihr woran es liegt?

  • Im error.log siehts wie folgt aus:

    [code=php]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
    [Mon Jul 06 18:42:27 2015] [error] [client 192.168.1.3] File does not exist: /var/www/favicon.ico, referer: http://192.168.1.10/
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    [Mon Jul 06 18:53:42 2015] [notice] caught SIGTERM, shutting down
    [Mon Jul 06 18:54:15 2015] [notice] Apache/2.2.22 (Debian) PHP/5.4.41-0+deb7u1 configured -- resuming normal operations
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    File "/var/www/all.py", line 85
    print i
    ^
    SyntaxError: invalid syntax
    File "/var/www/all.py", line 85
    print i
    ^
    SyntaxError: invalid syntax
    File "/var/www/all.py", line 85
    print i
    ^
    SyntaxError: invalid syntax
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified
    sudo: no tty present and no askpass program specified

    [/php]

    Es scheint als wäre etwas in der sudoers falsch, oder? Zwar sagt er auch es gibt einen Fehler in der all.py aber wenn ich diese direkt in der Console ausführen klappt alles.

    Meinst du in etwa so?
    [code=php]<?php exec('sudo /usr/bin/python3 /var/www/all.py'); ?>[/php]

    Einmal editiert, zuletzt von MrVinc (6. Juli 2015 um 21:26)

  • Forumsuche nach: sudo webscript
    (oder im FAQ Bereich -> Linksammlung -> sudo webscript)
    Bezüglich: Exit Code

    Und bitte auch das Python Script posten
    (Deine error.log sagt dass das all.py fehlerhaft ist)

    Einfach mal manuell über Konsole ausführen - wenn das bereits nicht geht kann es auch nicht via PHP gehen.

  • Über die Console geht es ja ohne Probleme, deswegen wundert es mich auch das nun ein Error im Log ist.

    Hier mal meine all.py, dient dem ansteuern eines Strittmotor's.

  • Die Variable 'time' solltes du anders wählen, da sich das mit dem Module 'time' überschneidet.

    Laut error.log mag er Zeile 85 nicht. Kann es vielleicht sein das du ausversehen ein TAB anstatt Leerzeichen genutzt hast? Das mag Python nicht, entweder oder, nicht mischen.


    Und wie hast du die sudoers bearbeitet? Benutz mal bitte den Befehl visudo damit die Syntax verifiziert wird. Wenn du anstatt vi lieber nano nutzen möchtest führst du ein mal export EDITOR=nano aus.

  • Alter Post vor dem Edetieren:

    Spoiler anzeigen


    Kann es vielleicht sein das du ausversehen ein TAB anstatt Leerzeichen genutzt hast?


    Nein, habe nochmals nachgeschaut. Habe jetzt aber einfach den print Befehl aus der Schleife geholt da ich diese Ausgabe zu Testzwecken hatte.


    Und wie hast du die sudoers bearbeitet? Benutz mal bitte den Befehl visudo damit die Syntax verifiziert wird.


    Ja, genau. Ich habe "sudo visudo" genutzt. Nach wie vor wird immer wenn ich über PHP versuche das Python sctipt aufzurufen dieser Fehler in der log datei eingetragen:

    Zitat

    sudo: no tty present and no askpass program specified

    Nach etwas googlen liegt es an der sudoers. Finde aber leider keine Lösung bzw. wo genau das Problem ist.


    Edit:
    Mit dem Eintrag:

    Code
    www-data ALL=(ALL) NOPASSWD: ALL

    in die sudoers gehts jetzt ohne Probleme. Danke für eure hilfe :).

    Einmal editiert, zuletzt von MrVinc (7. Juli 2015 um 15:54)


  • Ja, genau. Ich habe "sudo visudo" genutzt. Nach wie vor wird immer wenn ich über PHP versuche das Python sctipt aufzurufen dieser Fehler in der log datei eingetragen:


    Nach etwas googlen liegt es an der sudoers. Finde aber leider keine Lösung bzw. wo genau das Problem ist.

    Die Fehlermeldung deutet darauf hin das der via sudo ausgeführte Befehl nicht ohne Password freigegeben wurde und deshalb nach dem Password fragen will... Zur Eingabe fehlt aber eine Konsole (tty = teletype) und es ist auch kein askpass Programm angegeben (Umgebungsvariable SUDO_ASKPASS).

    Dein Problem ist, das du als Befehl 'python' ausführst - du übergibst dann zwar die Datei /var/www/all.py an python, aber der Befehl bleibt 'python', welchen du aber nicht via sudoers für www-data freigegeben hast.

    Also entweder über which python den Pfad zum Befehl in visudo eintragen, oder die Datei /var/www/all.py ausführbar machen (einen Shebang hast du bereits) und im exec direkt die Datei ausführen..

  • Einfach "ALL" einzutragen ist sehr sehr leichtsinnig und extrem unsicher. Mach es lieber so wie ich beschrieben habe - oder nutze die Forumsuche nach 'sudo webscript'.

    Davon abgesehen behebt das ja nicht das eigentliche Problem sondern umgeht es nur. Durch meinen Beitag#8 solltest du es nun hoffentlich verstanden haben (und alle anderen auch)

  • Da ich den Pi nicht ans Netz hängen will sondern als eigenen AP(mit WPA2) konfiguriere ist die Sicherheit Nebensache. Werde aber trotzdem deinen Rat beachten.

    Einmal editiert, zuletzt von MrVinc (7. Juli 2015 um 16:53)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!