특정 경로를 제공하는 http 서버를 어떻게 실행합니까?
다음은 제 Python3 프로젝트 계층 구조입니다.
projet
\
script.py
web
\
index.html
부터script.py
나는 콘텐츠를 제공하는 http 서버를 실행하고 싶습니다.web
폴더를 누릅니다.
간단한 http 서버를 실행하기 위해 이 코드를 제안합니다.
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
하지만 이것은 실제로 도움이 됩니다.project
,것은 아니다.web
서비스할 폴더의 경로를 지정하려면 어떻게 해야 합니까?
Python 3.7에서는 다음과 같은 인수를 사용할 수 있습니다.
import http.server
import socketserver
PORT = 8000
DIRECTORY = "web"
class Handler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=DIRECTORY, **kwargs)
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
명령행에서 다음을 수행합니다.
python -m http.server --directory web
좀 이상해지려고 하는...임의 디렉터리에 대한 핸들러를 만들 수 있습니다.
def handler_from(directory):
def _init(self, *args, **kwargs):
return http.server.SimpleHTTPRequestHandler.__init__(self, *args, directory=self.directory, **kwargs)
return type(f'HandlerFrom<{directory}>',
(http.server.SimpleHTTPRequestHandler,),
{'__init__': _init, 'directory': directory})
with socketserver.TCPServer(("", PORT), handler_from("web")) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
정적 파일만 제공하려면 Simple을 실행하면 됩니다.python 2를 사용하는 HTTPS 서버 모듈:
python -m SimpleHTTPServer
또는 파이썬 3과 함께:
python3 -m http.server
이렇게 하면 스크립트를 작성할 필요가 없습니다.
https://docs.python.org/3/library/http.server.html#http.server.SimpleHTTPRequestHandler
이 클래스는 현재 디렉터리 이하의 파일을 제공하여 디렉터리 구조를 HTTP 요청에 직접 매핑합니다.
따라서 서버를 시작하기 전에 현재 디렉토리를 변경하면 됩니다. 참조
예:
import http.server
import socketserver
import os
PORT = 8000
web_dir = os.path.join(os.path.dirname(__file__), 'web')
os.chdir(web_dir)
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
명령행을 실행할 수도 있습니다.
python3 -m http.server -d web 8000
완전성을 위해 임의 디렉터리에서 파일을 제공하도록 실제 서버 클래스를 설정하는 방법은 다음과 같습니다.
try
# python 2
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer as BaseHTTPServer
except ImportError:
# python 3
from http.server import HTTPServer as BaseHTTPServer, SimpleHTTPRequestHandler
class HTTPHandler(SimpleHTTPRequestHandler):
"""This handler uses server.base_path instead of always using os.getcwd()"""
def translate_path(self, path):
path = SimpleHTTPRequestHandler.translate_path(self, path)
relpath = os.path.relpath(path, os.getcwd())
fullpath = os.path.join(self.server.base_path, relpath)
return fullpath
class HTTPServer(BaseHTTPServer):
"""The main server, you pass in base_path which is the path you want to serve requests from"""
def __init__(self, base_path, server_address, RequestHandlerClass=HTTPHandler):
self.base_path = base_path
BaseHTTPServer.__init__(self, server_address, RequestHandlerClass)
그런 다음 코드에 임의 경로를 설정할 수 있습니다.
web_dir = os.path.join(os.path.dirname(__file__), 'web')
httpd = HTTPServer(web_dir, ("", 8000))
httpd.serve_forever()
Python 3+에는 더 짧은 방법이 있습니다.
import functools
Handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory='/my/dir/goes/here')
특정 디렉토리에서 쉽게 서비스할 수 있는 또 다른 방법입니다.
정말로 설정만 하면 되기 때문에directory
의 매개 변수SimpleHTTPRequestHandler
functools.dll을 사용하여 클래스를 인스턴스화하지 않고 핸들러 클래스를 준비할 수 있습니다.
from functools import partial
from http.server import HTTPServer, SimpleHTTPRequestHandler
from pathlib import Path
def start_httpd(directory: Path, port: int = 8000):
print(f"serving from {directory}...")
handler = partial(SimpleHTTPRequestHandler, directory=directory)
httpd = HTTPServer(('localhost', port), handler)
httpd.serve_forever()
최신 웹 정적 서버가 필요하다면,
deno
는 대안입니다.file server
아무 것도 없이code
.
단일 라인으로 deno 설치
https://github.com/denoland/deno_install#deno_install
설치하다file server
외줄로
deno install --allow-net --allow-read https://deno.land/std@0.125.0/http/file_server.ts
거부권을 사용합니다.file-server
file_server . --port=<port>
# Downloading https://deno.land/std@0.125.0/http/file_server.ts...
# HTTP server listening on http://0.0.0.0:<port>/
자세한 내용은 https://deno.land/manual/discovery/file_server#codestdhttpcode-file-server 사용하기
언급URL : https://stackoverflow.com/questions/39801718/how-to-run-a-http-server-which-serves-a-specific-path
'IT' 카테고리의 다른 글
T-SQL 표에서 두 번째 행만 선택하는 방법은 무엇입니까? (0) | 2023.06.22 |
---|---|
Git-Merge --dry-run 옵션이 있습니까? (0) | 2023.06.22 |
Google Font API 키는 어디에서 찾을 수 있습니까? (Newbie) (0) | 2023.06.22 |
sql server 2005에서 데이터 손실 없이 테이블의 "스키마"를 변경하려면 어떻게 해야 합니까? (0) | 2023.06.22 |
여러 Excel 열의 데이터를 모두 하나의 열로 통합하는 방법 (0) | 2023.06.22 |