Настройка Apache XAMPP в Windows для запуска Python-файлов .py: ScriptInterpreterSource Registry-Strict

994
Maleko48

Я установил новейшую версию 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
Anaksunaman

Можно ли вообще как-то обойтись без оператора 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').


Спасибо за ваш ответ, но мне не разрешено отмечать это или что-то еще, так как я новый участник с <15 респ. Maleko48 6 лет назад 0
Не волнуйтесь. Пожалуйста. знак равно Anaksunaman 6 лет назад 0