Configuração do apache do XAMPP no Windows para executar arquivos .py Python: ScriptInterpreterSource Registry-Strict

1

Eu tenho minha instalação da versão mais nova do XAMPP (w / PHP 7.2.2) e rodando o apache muito bem no meu laptop Windows 10 para minha classe de programação PHP. Consegui que o CGI funcionasse para executar corretamente os arquivos .py na janela do navegador, usando a opção + ExecCGI e adicionando .py à linha AddHandler no arquivo /XAMPP/apache/conf/httpd.conf.

Normalmente, as duas primeiras linhas precisam ficar assim com o CGI para que o arquivo .py seja executado corretamente:

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

No entanto, depois de ler a documentação do Apache2.4 para ScriptInterpreterSource: link

Eu adicionei a chave de registro correta mencionada na documentação junto com a linha:

ScriptInterpreterSource Registry-Strict

para meu /XAMPP/apache/conf/httpd.conf

e foi capaz de executar o meu script Python sem as duas primeiras linhas. No entanto, ele ainda requer uma instrução extra print () na primeira linha (ou print ('\ n')).

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

MINHA PERGUNTA:

Existe alguma maneira de contornar a necessidade da declaração print / newline na primeira linha do script Python?

    
por Maleko48 12.03.2018 / 21:34

1 resposta

0

Is there any way at all to get around needing the print/newline statement on the first line of the Python script?

Provavelmente não ... pelo menos não para usar o Python via CGI.

Para um determinado script CGI (não apenas para o Python), o idioma equivalente a essa "linha em branco" ( CRLF ) é necessário no início de qualquer dado retornado ao navegador. E enquanto o Apache pega o caminho do interpretador e o valor do cabeçalho Content-type do registro, parece não incluir esta linha.

It still requires an extra print() statement on the first line (or print('\n') ).

Para maior clareza, no caso de haver alguma confusão, ela deve ser a primeira linha do texto que você produziu (se houver) no seu script, por exemplo:

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

Observação (para todos os outros): se você não tiver tudo registrado como OP, ainda precisará de um hash-bang como !# python na primeira linha e deve descomentar print ('Content-type: text/html') .

por 13.03.2018 / 13:12