如何运行提供特定路径的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 。如何指定我要提供的文件夹的路径?

原文由 roipoussiere 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

在 Python 3.7 SimpleHTTPRequestHandler 可以采用 directory 参数

 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()

原文由 Andy Hayden 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您只想提供静态文件,您可以通过使用 python 2 运行 SimpleHTTPServer 模块来实现:

  python -m SimpleHTTPServer

或者使用 python 3:

  python3 -m http.server

这样您就不需要编写任何脚本。

原文由 Jerzy Pawlikowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题