【问题标题】:How can I create an local webserver for my python scripts?如何为我的 python 脚本创建本地网络服务器?
【发布时间】:2010-10-26 23:54:36
【问题描述】:

我希望使用本地网络服务器为用户运行一系列 python 脚本。由于各种不可避免的原因,python 脚本必须在本地运行,而不是在服务器上。因此,我将使用 HTML+浏览器作为前端的 UI,我对此感到满意。

因此,我一直在寻找可以执行 python 脚本的轻量级 Web 服务器,它位于机器的后台,最好是作为 Windows 服务。安全性和可扩展性不是高优先级,因为它们都是在小型网络内部运行的。

我应该将原生 python 网络服务器作为 Windows 服务运行(在这种情况下,如何运行)?还是将 Apache 安装到用户的机器上并像 CGI 一样运行?由于这都是本地的,因此性能也不是问题。

还是我遗漏了一些明显的东西?

【问题讨论】:

    标签: python webserver simplehttpserver


    【解决方案1】:

    不要浪费大量时间创建 Windows 服务。

    不要在 Windows Apache 上浪费太多时间。

    只需创建一个响应 HTTP 请求的 Python 服务。

    查看https://docs.python.org/2/library/basehttpserver.html
    https://docs.python.org/3/library/http.server.html 了解第 3 版
    Python 提供了一个 HTTP 服务器,您可以使用服务器端方法对其进行扩展。

    http://docs.python.org/library/wsgiref.html
    Python 提供了一个 WSGI 参考实现,使您的服务器简单且符合标准。

    还有http://fragments.turtlemeat.com/pythonwebserver.php


    “我试图避免让用户在命令提示符下运行 python 的东西。”

    我看不出点击网页与点击桌面图标有何不同。

    一旦您拥有了 Web 服务器,就可以相对容易地启动基于 Python 的 Web 服务器。首先,构建服务器。稍后,您可以确保服务器启动。让我们看看一些方法。

    1. 您的用户无法使用随机浏览器打开您的本地页面。他们需要一个书签来启动“localhost:8000/myspecialserverinsteadofthedestop/”该书签可以是一个 .BAT 文件,它 (1) 运行服务器,(2) 使用正确的初始 URL 运行 firefox。

    2. 你可以把服务器放在用户的开始-这个菜单中。

    3. 您可以让您的 Python 程序成为 Windows“服务”。

    【讨论】:

    • 所以我需要让用户在每次他们想使用框架时启动服务器?我试图避免让用户从命令提示符运行 python 的东西。除非是服务,否则龟肉链接需要手动运行。
    • +1 用于 wsgiref,这是在机器上本地测试 Python Web 脚本的绝佳方式。
    【解决方案2】:

    最好的方法是使用命令提示符创建自己的本地服务器。

    1. 创建一个新文件夹,比如 Project
    2. 在项目中创建一个新文件夹并将其命名为“cgi-bin”(不带引号)
    3. 将 .py 文件粘贴到 cgi-bin 文件夹中
    4. 打开 cmd 并切换到要从中运行服务器的目录并输入“python -m CGIHTTPServer”(不带引号)
    5. 最小化 cmd 窗口并打开浏览器并输入“localhost:8000/cgi-bin/yourpythonfilename.py”(不带引号)。

    【讨论】:

    • C:\Program Files\Python39\python.exe: 没有名为 CGIHTTPServer 的模块
    【解决方案3】:

    将原生 python 网络服务器作为 Windows 服务运行应该是轻而易举的事。查看使用 python 编写 windows 服务(win32api、ActiveState python)的文档以及子类化 BaseHttpServer 和 SimpleHttpServer 的文档。

    顺便说一句:我在 stackoverflow 上也有类似的问题:How to stop BaseHTTPServer.serve_forever() in a BaseHTTPRequestHandler subclass?

    基本上,您将 BaseHTTPServer 子类化(无论如何您都必须...),然后...但只需阅读已接受的答案 - 它让我走上了正确的轨道!

    【讨论】:

    • 我已经阅读了所有关于将 BaseHTTPServer 作为服务运行的文档,但我不知道如何使其可中断(因此它会正常停止和启动)。 IIS 意味着更多的学习,我希望使用 simple...
    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多