공개 디렉터리 지정 방법 Python 간이 HTTP 서버

6837 단어 http.serverPython
파이썬은 WEB 개발용 간편한 HTTP 서버 기능을 갖추고 있다.
편리하지만 공개용 스크립트를 공개하고 싶은 디렉터리 바로 아래에 놓아야 하기 때문에 불편하기 때문에 디렉터리를 지정하는 방법만 찾아봤다.

결론


(Python 3.7 이상 지원)
다음 DIRECTORY에 스크립트의 상대 경로를 입력하면 됩니다.
참조
server.py
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()

참조 1


StackOverflow "How to run a http server which serves a specific path?"
나는 내가 알고 싶은 일을 썼다.

코드


공개 디렉터리를 특별히 지정하지 않은 경우 다음과 같은 코드가 될 수 있다.스크립트가 자동으로 존재하는 디렉터리가 공개 디렉터리가 됩니다.
TCPServer () 에 매개 변수로 교부하여 TCPServer () 에SimpleHTTPRequestHandler 구조기에 적당한 매개 변수를 넣었습니다.그래서 이 핸들러는 함수 포인터처럼(이게 바로'처리 프로그램'인가?)
디렉토리를 지정하지 않습니다.py

Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
그렇다면 상기 결론의 코드는 무엇을 하고 있을까? TCPServer()에서 SimpleHTTPRequestHandler라고 부르는 구조기의 넓은 범위(이하 코드에서 말하는args와*kwargs)를 바꾸지 말고,
매개 변수directory에 '임의로 지정한 디렉터리' 를 전달하기 위해 구조기를 덮어씁니다.
어려운 곳만 알아봤어.py

#SimpleHTTPRequestHandlerの初期化関数を再定義
class Handler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=DIRECTORY, **kwargs)

#ほんとはこれがやりたいのだけど、引数足りないエラーになる。
#引数はTCPServer()の内部で適当に入れているから、ここでは入れられない&わからない。
Handler = http.server.SimpleHTTPRequestHandler(directory="web")

#これもだめ。当然だがargsってなんだよって言われる。
Handler = http.server.SimpleHTTPRequestHandler(*args,directory="web",**kwargs)

참조 2


python 규격서 http에 따라server

네!나는 아래의directory에 파라미터를 넣고 싶다.

참조 3


python에서 계승과 슈퍼 () 를 사용하여 init 파생류를 만듭시다
구조기가 덮인 부분을 모르겠습니다. 잘 부탁드립니다.
Python의 가변 길이 매개 변수 사용 방법
args의 별표의 뜻을 모르기 때문에 당신의 보살핌을 받았습니다.

좋은 웹페이지 즐겨찾기