How to run a http server which serves a specific path?

后端 未结 6 729
萌比男神i
萌比男神i 2020-12-02 12:02

this is my Python3 project hiearchy:

projet
  \\
  script.py
  web
    \\
    index.html

From script.py, I would like to run a

6条回答
  •  [愿得一人]
    2020-12-02 12:27

    Just for completeness, here's how you can setup the actual server classes to serve files from an arbitrary directory:

    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)
    

    Then you can set any arbitrary path in your code:

    web_dir = os.path.join(os.path.dirname(__file__), 'web')
    httpd = HTTPServer(web_dir, ("", 8000))
    httpd.serve_forever()
    

提交回复
热议问题