XAMPP-Apache-Setup unter Windows zum Ausführen von .py-Python-Dateien: ScriptInterpreterSource Registry-Strict

1050
Maleko48

Ich habe meine Installation der neuesten XAMPP-Version (mit PHP 7.2.2) installiert und Apache auf meinem Windows 10-Laptop für meine PHP-Programmierklasse ausgeführt. Ich konnte CGI dazu bringen, .py-Dateien korrekt im Browserfenster auszuführen. Dazu wurde die Option + ExecCGI verwendet und .py wurde der AddHandler-Zeile in /XAMPP/apache/conf/httpd.conf hinzugefügt.

Normalerweise müssen die ersten beiden Zeilen mit CGI folgendermaßen aussehen, damit die PY-Datei ordnungsgemäß ausgeführt wird:

#!C:/Python/Python36_x86/python.exe print("Content-Type: text/html\n") 

Nach dem Lesen der Apache2.4-Dokumentation für ScriptInterpreterSource: https://httpd.apache.org/docs/2.4/mod/core.html#scriptinterpretersource

Ich habe den richtigen Registrierungsschlüssel in der Dokumentation zusammen mit der Zeile hinzugefügt:

ScriptInterpreterSource Registry-Strict 

in meine /XAMPP/apache/conf/httpd.conf

und konnte mein Python-Skript ohne diese ersten beiden Zeilen ausführen. Es erfordert jedoch noch eine zusätzliche Anweisung print () in der ersten Zeile (oder print ('\ n')).

================================================== ===========================

MEINE FRAGE:

Gibt es überhaupt einen Weg, um herumzukommen und die Anweisung print / newline in der ersten Zeile des Python-Skripts zu benötigen?

1

1 Antwort auf die Frage

0
Anaksunaman

Gibt es überhaupt einen Weg, um herumzukommen und die Anweisung print / newline in der ersten Zeile des Python-Skripts zu benötigen?

Wahrscheinlich nicht ... zumindest nicht für die Verwendung von Python über CGI.

Für ein gegebenes CGI-Skript (nicht nur das in Python) wird das Sprachäquivalent dieser "leeren Zeile" ( CRLF) am Anfang aller an den Browser zurückgegebenen Daten benötigt. Und während Apache den Interpreterpfad und den Wert für den Content-typeHeader aus der Registrierung bezieht, scheint diese Zeile nicht zu enthalten.

Es erfordert noch eine zusätzliche print()Anweisung in der ersten Zeile (oder print('\n')).

Der Klarheit halber muss es bei Verwirrungen lediglich die erste Textzeile sein, die Sie (falls vorhanden) aus Ihrem Skript ausgeben, z. B .:

# Print our Python version  import sys  version = sys.version_info full_version = str(version.major) + '.' + str(version.minor) + '.' + str(version.micro)  # 8000 more lines that don't include print()...  # === Our first line(s) of text output === # print ('Content-type: text/html') print ('')  print ('Python Version: ', full_version) 

Hinweis (für alle anderen): Wenn Sie nicht alles wie OP registriert haben, benötigen Sie immer noch einen Hash-Bang wie in der !# pythonersten Zeile und sollten ein Kommentar abgeben print ('Content-type: text/html').


Vielen Dank für Ihre Antwort, aber ich darf es nicht markieren, da ich ein neues Mitglied mit <15 Wiederholungen bin. Maleko48 vor 6 Jahren 0
Keine Bange. Bitte. =) Anaksunaman vor 6 Jahren 0