CGIHTTPRequestHandler и SimpleHTTPRequestHandler в Eclipse на Ma c в Firefox - PullRequest
0 голосов
/ 17 апреля 2020

Попытка запустить python cgi-сервер из Eclipse на Ма c Air и отобразить hello world в Firefox, две проблемы. Вот код для запуска в файле run_server.py

from http.server import HTTPServer
from http.server import CGIHTTPRequestHandler

def run_server(handler_class,server_class=HTTPServer ):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

def main():
    run_server(CGIHTTPRequestHandler)

if __name__ == '__main__':
    main()

Структура каталога в каталоге проекта

analytics
         \
          run_server.py
cgi-bin
       \
        index.py

index.py

#!/usr/bin/env python 

print('Content-type: text/html;\n\n')
print('<h1>Hello, world!</h1>')

Из Командную строку в каталоге проекта можно запустить с помощью

$ python -m analytics.run_server

Убедитесь, что в каталоге аналитики есть __init__.py, чтобы использовать опцию -m. Теперь попробуйте загрузить страницу

http://localhost:8000/cgi-bin/index.py

В Chrome все работает. Так в чем проблема? В Firefox URL никогда не найден. На Ma c также, если вы запускаете сервер изнутри Eclipse IDE, cgi пытается выполнить код python 3 с установленной ОС python 2 Firefox 404s, время ожидания, представляет пустую страницу, или если проблема с URL решена, попытается сохранить файл. Он также не обслуживает содержимое c, когда существует проблема с URL. Консоль Eclipse при запуске cgi отображает трассировку стека синтаксической ошибки из оператора печати python lib site.py, что указывает на природу проблемы. См. Что нового в Python 3

Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)

Простые решения для обеих сторон, в разделе ответов ниже.

1 Ответ

0 голосов
/ 17 апреля 2020

Добавьте или создайте файл / etc / localhosts, как в sudo vi / etc / localhosts, или по вашему выбору.

127.0.0.1 localhost

Это исправляет известную ошибку (ссылка ниже) из двух лет a go, закрыто два месяца a go в качестве дубликата и содержит вышеуказанный обходной путь, очень близко к основанию. https://bugzilla.mozilla.org/show_bug.cgi?id=1433933 Существует активная ошибка, открытая через 5 лет go, обновленная через 6 дней go, 10 апреля 2020 г., выглядит очень близкой к завершению. https://bugzilla.mozilla.org/show_bug.cgi?id=1220810 Всякий раз, когда это будет сделано, вам все равно придется обновлять Firefox.

В случае конфликта версий python запуск сервера из командной строки не представляет проблем в выполнение cgi, index.py Однако попытка запустить сервер внутри Eclipse не работает, когда путь к шебангу #! (Этимология резкого взрыва, или взрыва оболочки) составляет

#!/usr/bin/env python

На Ма c он выбирает установку по умолчанию python 2, но пытается запустить * 1029 Код * 3 (при условии, что вы обновились, поскольку python 2 - это конец жизни). Apple, несмотря на обновления ОС, сохранила python 2 для обратной совместимости, хотя дни ее сочтены. В конце концов, ОС и приложения больше не будут зависеть от какой-либо установленной ОС python. Не уверен в точном механизме, где Eclipse получает python 2, когда сервер запускает скрипт, хотя интерпретатор равен 3. Установка пути к #! / Usr / bin / env python3 не работает, как и #! / Usr / bin / python3. Что значит? Найдите абсолютный путь к вашему python 3 и используйте его, он должен появиться даже в трассировке стека ошибок, но вот пример из моей настройки.

#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

...