Hallo zusammen,
mir ist klar, schon viele haben das Problem, Python-Server findet Datei nicht, aber die die ich bisher gefunden habe helfen mir nicht weiter. Unter anderem weil ich die Datei sehen kann, und Python auch.
Meine Frage ist nun wo steckt mein Fehler?
Die Datei unter /cgi-bin/abstimmung2.py wird nicht gefunden.
Die Datei unter /cgi-bin/uhrzeit2.py wird gefunden.
Der Ordner /cgi-bin/ ist im Ordner /httpserver/ in diesem wurde auch der Server gestartet.
Auf dem Bild seht ihr links: Das die Shell die Datei öffnet und die Befehle »os.path« und »os.listdir« die Datei ebenfalls sehen.
Rechts oben seht ihr: Das der Pfad und die Datei auch im Terminal gefunden und geöffnet werden.
Rechts unten seht ihr: Die Fehlermeldung vom Server sowie den funktionierenden Aufruf einer anderen Datei im selben Ordner.
Kann mir bitte jemand verraten, warum die Datei vom Server nicht gefunden wird?
Python Server findet Datei nicht.
-
- User
- Beiträge: 20
- Registriert: Sonntag 27. Juni 2021, 10:31
- Wohnort: Kassel
Danke, aber daran liegt es nicht. Andere Dateien im selben Ordner funktionieren ja.
Bild: http://menkel-online.de/Images/Fehler.jpg
Ich habe Quatsch geschrieben. Du hast ja andere CGI Skripte, das habe ich übersehen. Dachte es geht um zb Bilder oder HTML.Hast du es probiert? Oder glaubst du das nur? Dein CGI Skript wird anders gestartet als deine Dateien ausgeliefert, und bei einem Aufruf wie execve kann so etwas eine Rolle spielen. Ich rate also nachdrücklich dazu, es wenigstens mal zu probieren.
Ist der shebang des CGI Skripts korrekt?
Nachdem ich das Problem nun nachstellen konnte, ist genau das vermutlich das Problem. Wenn das Skript nicht ausführbar ist, loggt http.server "code 403, message CGI script is not executable". Wenn das Script nicht gefunden wird, loggt http.server "code 404, message No such CGI script". Wenn das Script einen intendierten Syntax-Fehler hat, loggt http.server den Syntaxfehler und dann "CGI script exit status 0x100". Aber wenn ich in die Shebang-Zeile nicht den korrekten Pfad eines Executable angebe, loggt http.server genau das, was der TO zeigt.
-
- User
- Beiträge: 20
- Registriert: Sonntag 27. Juni 2021, 10:31
- Wohnort: Kassel
Danke für die Hilfe bisher,
Alle anderen Skripte in dem Ordner lassen sich aufrufen, nur dieses eine versagt beim Aufruf im Browser.
In der Shell und im Terminal geht es.
ls -l abstimmung2.py
-rwxrwxrwx 1 valentin valentin 2545 Jun 28 13:03 abstimmung2.py
______________________________________________________________________
Die Meldung vom Server ist:
Wie hier http://menkel-online.de/Images/Fehler.jpg zusehen ist sie aber für Shell und Terminal zuerkennen.
Der shebang ist, wie in allen anderen Skripten die laufen, »#!/usr/bin/python3«, und sollte daher doch stimmen.Ist der shebang des CGI Skripts korrekt?
Alle anderen Skripte in dem Ordner lassen sich aufrufen, nur dieses eine versagt beim Aufruf im Browser.
In der Shell und im Terminal geht es.
Ja, in der Shell und im Terminal lüft die Datei. Nur nicht im Browser. Die Rechte sind:Ist die Datei denn ausführbar?
ls -l abstimmung2.py
-rwxrwxrwx 1 valentin valentin 2545 Jun 28 13:03 abstimmung2.py
______________________________________________________________________
Die Meldung vom Server ist:
Code: Alles auswählen
Exception happened during processing of request from ('127.0.0.1', 55630)
Traceback (most recent call last):
File "/usr/lib/python3.8/http/server.py", line 1179, in run_cgi
os.execve(scriptfile, args, env)
NotADirectoryError: [Errno 20] Not a directory: '/mnt/sda5/scripts/python/Buch/22_CGI/httpserver/cgi-bin/abstimmung2.py'
----------------------------------------
127.0.0.1 - - [28/Jun/2021 12:50:23] CGI script exit status 0x7f00
Wie hier http://menkel-online.de/Images/Fehler.jpg zusehen ist sie aber für Shell und Terminal zuerkennen.
"Not a directory" (ENOTDIR) ist offensichtlich ein ganz anderer Fehler als "das No such file or directory" (ENOENT) von weiter oben. Also ist jetzt irgend etwas anders als in Deinen früheren Screenshots. Ansonsten gilt in Abwandlung eines beliebten Spruchs unter Juristen: ein Blick in den Code erleichtert die Fehlersuche.valentinks hat geschrieben: ↑Montag 28. Juni 2021, 12:35 Die Meldung vom Server ist:Code: Alles auswählen
Exception happened during processing of request from ('127.0.0.1', 55630) Traceback (most recent call last): File "/usr/lib/python3.8/http/server.py", line 1179, in run_cgi os.execve(scriptfile, args, env) NotADirectoryError: [Errno 20] Not a directory: '/mnt/sda5/scripts/python/Buch/22_CGI/httpserver/cgi-bin/abstimmung2.py'
-
- User
- Beiträge: 20
- Registriert: Sonntag 27. Juni 2021, 10:31
- Wohnort: Kassel
Bleibt nur noch das ich schon länger in den Code blicke und einfach nicht erkenne warum diese eine Datei nicht läuft.LukeNukem hat geschrieben: ↑Montag 28. Juni 2021, 13:25
"Not a directory" (ENOTDIR) ist offensichtlich ein ganz anderer Fehler als "das No such file or directory" (ENOENT) von weiter oben. Also ist jetzt irgend etwas anders als in Deinen früheren Screenshots. Ansonsten gilt in Abwandlung eines beliebten Spruchs unter Juristen: ein Blick in den Code erleichtert die Fehlersuche.
Screenshots mit der Änderung: keine Leerzeichen
Fehler: http://menkel-online.de/Images/Fehler2.jpg
Wenn du die Datei so aufrufst wie gezeigt, nämlich als 'python3 deinskript.py', ist die Shebang irrelevant, da du gar nicht das Skript direkt ausführst, sonst den Python-Interpreter, der das Skript dann lädt; das ist technisch etwas anderes. Hast du es auch mit "'./deinskript.py" getestet? Die Shebang sollte nach Möglichkeit außerdem "#!/usr/bin/env python3" lauten. Meine Erfahrung ist, dass Fehler wie deiner in aller Regel davon kommen, dass irgendwas mit der Shebang oder den Permissions nicht stimmt; die Permission scheinen aber ja korrekt zu sein.valentinks hat geschrieben: ↑Montag 28. Juni 2021, 12:35 Der shebang ist, wie in allen anderen Skripten die laufen, »#!/usr/bin/python3«, und sollte daher doch stimmen.
Ansonsten, weil es noch keiner gesagt hat, der allgemeine Hinweise: CGI macht man heute eigentlich eher nicht mehr. Aus Nostalgiegründen ist das okay. Wenn man moderne Webentwicklung lernen möchte, ist das aber eher nicht der richtige Weg.
-
- User
- Beiträge: 20
- Registriert: Sonntag 27. Juni 2021, 10:31
- Wohnort: Kassel
Danke für die lange Antwort
/usr/bin/env: »python3\r“: Datei oder Verzeichnis nicht gefunden
Der Aufruf im Terminal ist nur dafür da um zuzeigen das die Datei tatsächlich von Python gefunden werden kann, also tatsächlich existiert, nur nicht für den Server.
Wenn ich die Shebang wie vorgeschlagen ändere bekomme ich eine neue Fehlermeldung:nezzcarth hat geschrieben: ↑Montag 28. Juni 2021, 17:23 Hast du es auch mit "'./deinskript.py" getestet? Die Shebang sollte nach Möglichkeit außerdem "#!/usr/bin/env python3" lauten. Meine Erfahrung ist, dass Fehler wie deiner in aller Regel davon kommen, dass irgendwas mit der Shebang oder den Permissions nicht stimmt; die Permission scheinen aber ja korrekt zu sein.
/usr/bin/env: »python3\r“: Datei oder Verzeichnis nicht gefunden
Gelesen hab ich das schon öfter da das Buch, das nebenbei bemerkt viele nicht funktionierende Skripte enthält, so aufgebaut ist würde ich gern dieses letzte Skript noch beenden. Vor allem weil ich wissen will warum dieses eine Skript nicht läuft.
Da ist ja der Fehler. Die Zeilenendezeichen sind falsch. Deine Datei hat die DOS-Zeichenfolge "\r\n", die Shebang-Zeile darf aber nur das Unix-Zeilenende "\n" haben. Jeder einigermaßen vernünftige Editor kann das konvertieren.
-
- User
- Beiträge: 20
- Registriert: Sonntag 27. Juni 2021, 10:31
- Wohnort: Kassel
Danke. Das war's. Danke.
Ich dachte die Python IDLE könnte das.