Seite 1 von 1
#!Shebang umgehen/weglassen
Verfasst: Montag 10. Juni 2013, 20:30
von no.cigar
Moin moin,
bin Python-Neuling und ebenfalls neu hier im Forum.
Vorweg: Ich experimentiere gerade aus reinem Interesse an der Materie mit Python herum, deshalb wundert euch bitte nicht über dumme Fragen, auch wenn es solche ja angeblich nicht geben soll.
Hergeführt hat mich eine Frage die ich mit Hilfe von Google nicht beantworten konnte bzw. zu keiner funktionierenden Lösung gekommen bin.
Das Problem betrifft die Shebang-Zeile am Anfang meiner/einer Python-WebApp.
Im Sinne der Portabilität muss es doch möglich sein einen allgemein gültigen Python-Pfad zu deklarieren, sodass ein Python-Skript ohne Anpassungen an der Shebang vorzunehmen z.B. direkt im Browser aufgerufen werden kann und zwar von jedem Webserver aus.
Wie kann ich am Beispiel von XAMPP (welches ich lokal nutze) den Python-Pfad für den Webserver hinterlegen, sodass meine *.py's ohne Shebang auskommen? :K
Re: #!Shebang umgehen/weglassen
Verfasst: Montag 10. Juni 2013, 20:45
von BlackJack
@no.cigar: Wir müssten erst einmal klären wie Du Deine Webanwendung in den Webserver einbindest. CGI, WSGI, mod_python? (Letzteres hoffentlich nicht mehr — das ist tot.)
Bei WSGI stellt sich das Problem nicht. Und bei CGI ist es nicht möglich weil das nichts mit dem Webserver zu tun hat, der startet nur ein externes Programm wobei ihm völlig egal ist was das für eine ist und wie das ausgeführt wird. Da hat sich das Betriebssystem drum zu kümmern.
Re: #!Shebang umgehen/weglassen
Verfasst: Montag 10. Juni 2013, 21:09
von no.cigar
Hallo BlackJack!
Ja bei mod_python bin ich auch schon gelandet, habe mich aber gerade aus dem genannten Grund davon abschrecken lassen.
Ok, ich hätte eventuell gleich deutlicher sein müssen:
Im moment betrachte ich Python als Abwechslung zu PHP und bin daher noch gar nicht so tief eingestiegen.
Dass es mit CGI de facto nicht möglich ist, ist auf jeden Fall schon einmal gut zu wissen. Aber wie sieht es denn mit den py-Skripten aus die ich direkt über meinen Browser aufrufe? Brauchen diese in jedem Fall eine Shebang?
Also z.B.
...möchte ich unter
http://localhost/hallo.py aufrufen unabhängig von der Webserverumgebung, da ich lokal Windows nutze und auf dem Webserver UNIX.
Faul wie ich bin suche ich natürlich nach einer Möglichkeit die Shebang im Anschluss nicht immer abändern zu müssen.

Re: #!Shebang umgehen/weglassen
Verfasst: Montag 10. Juni 2013, 22:01
von DasIch
Das was du beschreibst ist CGI.
Re: #!Shebang umgehen/weglassen
Verfasst: Montag 10. Juni 2013, 22:09
von no.cigar
Oh, klasse!
Also nicht möglich...schade.
Na ja, Fachlektüre ist bereits unterwegs.
Re: #!Shebang umgehen/weglassen
Verfasst: Montag 10. Juni 2013, 22:12
von BlackJack
Und bei CGI stellt sich das Problem bei Windows vs. Linux nicht weil Windows anhand von Dateiendungen entscheidet wie eine Datei ausgeführt wird und Linux die Shebang-Zeile verwendet. Da muss man also nichts ändern.
Letztendlich will man aber gar kein CGI verwenden sondern WSGI.
Re: #!Shebang umgehen/weglassen
Verfasst: Dienstag 11. Juni 2013, 09:01
von snafu
no.cigar hat geschrieben:
Jetzt mal unabhängig davon, dass es für das konkrete Problem wohl nicht nötig ist: Windows kennt keine Shebangs. Das läuft - wie schon geschrieben wurde - nur über die Windows-eigene Erkennung der Dateiendung. Will man trotzdem eine explizite Angabe der Python-Version im Quelltext haben, die auch unter Windows verstanden wird, dann ist es zumindest möglich, den ab Python 3.3 eingebauten Mechanismus zur Interpretation eines Shebangs zu nutzen (weitere Infos
hier). Ob man das brauchbar findet, sei jedem selbst überlassen. Wie gesagt: Eine automatische Ausführung der passenden Interpreter-Version (z.B. hinsichtlich 2.x vs. 3.x Code) ist damit nur sehr bedingt möglich, weil man vor 3.3 eher keinen vorinstallierten "Shebang-Interpreter" erwarten sollte und die Shebang-Angabe unter Windows daher ins Leere läuft.
Re: #!Shebang umgehen/weglassen
Verfasst: Dienstag 11. Juni 2013, 10:45
von no.cigar
Sobald ich allerdings die Shebang in dem oben aufgeführten Kurzprogramm weglasse, spuckt mir XAMPP bzw. Apache 2.4.3 unter Windows folgenden Fehler aus:
Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist. Der Server ist entweder überlastet oder ein Fehler in einem CGI-Skript ist aufgetreten.
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
Re: #!Shebang umgehen/weglassen
Verfasst: Dienstag 11. Juni 2013, 11:45
von BlackJack
@no.cigar: Und was steht dazu in den Logs?
Re: #!Shebang umgehen/weglassen
Verfasst: Dienstag 11. Juni 2013, 13:45
von DasIch
Könnte sein das Apache die Shebang benutzt um bei CGI den Interpreter bei Skripten zu ermitteln.
Re: #!Shebang umgehen/weglassen
Verfasst: Dienstag 11. Juni 2013, 15:35
von no.cigar
Code: Alles auswählen
[Tue Jun 11 12:14:42.587696 2013] [cgi:error] [pid 3936:tid 1620] (9)Bad file descriptor: [client ::1:58181] AH01222: don't know how to spawn child process: E:/xampp/htdocs/hallo.py
Hier liegt der Fehler, werde mich mal umschauen.