1

Я установил новейшую версию XAMPP (с PHP 7.2.2) и отлично запускаю apache на своем ноутбуке с Windows 10 для своего класса программирования PHP. Мне удалось заставить CGI работать правильно для запуска файлов .py в окне браузера, используя опцию +ExecCGI и добавив .py в строку AddHandler в /XAMPP/apache/conf/httpd.conf.

Обычно первые две строки должны выглядеть так с CGI, чтобы файл .py работал правильно:

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

Однако после прочтения документации Apache2.4 для ScriptInterpreterSource: https://httpd.apache.org/docs/2.4/mod/core.html#scriptinterpretersource

Я добавил правильный раздел реестра, упомянутый в документации, вместе со строкой:

ScriptInterpreterSource Registry-Strict

на мой /XAMPP/apache/conf/httpd.conf

и смог запустить мой скрипт на Python без этих первых двух строк. Тем не менее, он все еще требует дополнительного оператора print() в первой строке (или print('\n')).

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

МОЙ ВОПРОС:

Можно ли вообще как-то обойтись без оператора print/newline в первой строке скрипта Python?

1 ответ1

0

Можно ли вообще как-то обойтись без оператора print/newline в первой строке скрипта Python?

Вероятно, нет ... по крайней мере, не для использования Python через CGI.

Для данного сценария CGI (а не только в Python) языковой эквивалент этой "пустой строки" (CRLF) необходим в начале любых данных, возвращаемых браузеру. И хотя Apache извлекает путь и значение интерпретатора для заголовка Content-type из реестра, он, похоже, не включает эту строку.

Это все еще требует дополнительного оператора print() в первой строке (или print('\n') ).

Для ясности, если есть какая-то путаница, это просто должна быть первая строка текста, которую вы выводите (если есть) из вашего скрипта, например:

# 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)

Примечание (для всех остальных): Если у вас не все зарегистрировано, как OP, вам все еще нужен хеш-бэнг, такой как !# python качестве первой строки и должен раскомментировать print ('Content-type: text/html') .


Всё ещё ищете ответ? Посмотрите другие вопросы с метками .