Какой Python 3 аналог команды python -m SimpleHTTPServer?
Эквивалент команды python -m SimpleHTTPServer в Python 3 — это python3 -m http.server. Эта команда запускает простой HTTP-сервер, который обслуживает файлы из текущей директории по умолчанию на порту 8000, предоставляя ту же функциональность, что и устаревший модуль SimpleHTTPServer, но обновленный для совместимости с Python 3.
Содержание
- Базовое использование
- Параметры командной строки
- Расширенные функции и настройка
- Программное использование
- Сравнение с SimpleHTTPServer
- Типичные случаи использования
Базовое использование
Наиболее прямая замена для python -m SimpleHTTPServer в Python 3:
python3 -m http.server
Эта команда запускает HTTP-сервер на порту 8000 и обслуживает файлы из текущей директории. Когда вы открываете веб-браузер и переходите по адресу http://localhost:8000, вы увидите список файлов текущей папки, что позволит вам просматривать и скачивать файлы.
Согласно документации Python, сервер автоматически ищет и обслуживает index.html, когда кто-то запрашивает директорию. В выводе в терминале будет примерно следующее:
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Чтобы указать другой порт, просто добавьте номер порта в качестве аргумента:
python3 -m http.server 9000
Параметры командной строки
Модуль http.server предоставляет несколько полезных параметров командной строки, которые расширяют его функциональность:
Указание порта
Вы можете указать любой доступный номер порта:
python3 -m http.server 8080
Привязка к адресу
Параметр -b или --bind позволяет указать, к какому сетевому интерфейсу следует привязать сервер. Как отмечено в ответе на Stack Overflow, сервер по умолчанию привязывается ко всем интерфейсам, но вы можете ограничить его:
python3 -m http.server -b 127.0.0.1
Это привязывает сервер только к localhost. В Python 3.8+ также поддерживаются IPv6-адреса в аргументе привязки.
Обслуживание директории
Параметр -d или directory позволяет обслуживать файлы из указанной директории вместо текущей:
python3 -m http.server -d ~/Documents/website
Как упоминается в руководстве Real Python, с помощью этого параметра вы можете связать домашний адрес сервера (/) с совершенно другой директорией.
Расширенные функции и настройка
Для более продвинутой функциональности вы можете создавать собственные обработчики запросов, создавая подклассы SimpleHTTPRequestHandler. В уроке DigitalOcean объясняется, что этот подход позволяет вам:
- Обрабатывать POST-запросы
- Добавлять собственные заголовки
- Переопределять методы по умолчанию
- Определять собственное поведение сервера
Вот пример обработчика, который всегда обслуживает index.html:
import http.server
import socketserver
PORT = 8000
class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.path = 'index.html'
return http.server.SimpleHTTPRequestHandler.do_GET(self)
Handler = MyHttpRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("Http Server Serving at port", PORT)
httpd.serve_forever()
Программное использование
Вы также можете использовать модуль http.server программно без интерфейса командной строки. Это дает вам больше контроля над конфигурацией сервера:
import http.server
import socketserver
PORT = 8080
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving the website at port", PORT)
httpd.serve_forever()
Как показано в примере на Stack Overflow, этот подход позволяет интегрировать HTTP-сервер в более крупные приложения.
Сравнение с SimpleHTTPServer
Согласно документации Python, модуль SimpleHTTPServer был объединен с http.server в Python 3. Согласно руководству сообщества Better Stack, основные различия включают:
- Чистый вывод: Модуль
http.serverпредоставляет более понятные сообщения и не показывает все детали Python-модулей при выходе - Лучшее обработка ошибок: Более надежная обработка HTTP-запросов с лучшим контролем над ответами
- Поддержка IPv6: Добавлена в Python 3.8 для параметра
--bind - Улучшенная безопасность: Обновленные функции безопасности и лучшие поведения по умолчанию
Типичные случаи использования
Модуль http.server идеален для различных сценариев:
- Локальная разработка: Быстрое обслуживание статических файлов для веб-разработки
- Обмен файлами: Обмен файлами в локальной сети
- Тестирование: Локальное тестирование веб-приложений без полноценного веб-сервера
- Документация: Обслуживание локальных файлов документации
- Прототипирование: Быстрое создание прототипов веб-приложений
Источники
- What is the Python 3 equivalent of “python -m SimpleHTTPServer” - Stack Overflow
- The Python 3 Equivalent of SimpleHTTPServer - Stack Abuse
- What Is the Python 3 Equivalent of “Python -M Simplehttpserver” | Better Stack Community
- What is the Python 3 equivalent of “python -m SimpleHTTPServer”? - TechGrind
- How to Create a Simple HTTP Server in Python | DigitalOcean
- SimpleHTTPServer — Simple HTTP request handler — Python 2.7.18 documentation
- What is the Python 3 equivalent of “python -m SimpleHTTPServer” - PythonHow
- How to Launch an HTTP Server in One Line of Python Code – Real Python
- One-Line Python HTTP Server: Quick Start Guide | Better Stack Community
- Python’s http.server module - Python Morsels
Заключение
Эквивалент python -m SimpleHTTPServer в Python 3 — это python3 -m http.server, который предоставляет ту же основную функциональность с несколькими улучшениями и дополнительными функциями. Ключевые выводы включают:
- Используйте
python3 -m http.serverдля базового обслуживания файлов - Изучите параметры командной строки, такие как
-bдля привязки к конкретным адресам и-dдля обслуживания пользовательских директорий - Рассмотрите возможность создания собственных обработчиков для расширенной функциональности, такой как обработка POST-запросов
- Модуль идеален для локальной разработки, обмена файлами и быстрого прототипирования
В большинстве случаев простой интерфейс командной строки будет достаточным, но когда вам нужен больший контроль, программный API предлагает обширные возможности настройки. Переход от SimpleHTTPServer к http.server прост, и большинство существующих рабочих процессов требуют лишь незначительных корректировок для бесшовной работы с Python 3.