小编Dav*_*cks的帖子

在Windows中将Python Web服务器作为服务运行

我有一个小的Web服务器应用程序,我用Python编写,从数据库系统获取一些数据并将其作为XML返回给用户.这部分工作正常 - 我可以从命令行运行Python Web服务器应用程序,我可以让客户端连接到它并获取数据.目前,要运行Web服务器,我必须以管理员用户身份登录到我们的服务器,并且必须手动启动Web服务器.我希望Web服务器在系统启动时自动启动为服务并在后台运行.

使用ActiveState的站点和StackOverflow中的代码,我非常清楚如何创建服务,我想我已经排序了 - 我可以安装并启动我的Web服务器作为Windows服务.但是,我无法弄清楚如何再次停止服务.我的Web服务器是从BaseHTTPServer创建的:

server = BaseHTTPServer.HTTPServer(('', 8081), SIMSAPIServerHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

自然地,serve_forever()调用使Web服务器处于无限循环中并等待HTTP连接(或ctrl-break按键,对服务无用).我从上面的示例代码中得到了一个想法,即你的main()函数应该处于一个无限循环中,只有当它处于"停止"状态时才会突破它.我的主要调用serve_forever().我有一个SvcStop功能:

def SvcStop(self):
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    exit(0)
Run Code Online (Sandbox Code Playgroud)

当我从命令行执行"python myservice stop"时,我似乎被调用了(我可以在其中放置一个产生输出到文件的调试行)但实际上并没有退出整个服务 - 后续调用"python myservice start" "给我一个错误:

启动服务时出错:服务实例已在运行.

随后的停止呼叫给了我:

停止服务时出错:此时服务无法接受控制消息.(1061)

我想我需要替换serve_forever(serve_until_stop_received,或其他),或者我需要一些修改SvcStop的方法,以便它停止整个服务.

这是一个完整的列表(我已经修剪了包含/注释以节省空间):

class SIMSAPIServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        try:
            reportTuple = self.path.partition("/")
            if len(reportTuple) < 3:
                return
            if reportTuple[2] == "":
                return
            os.system("C:\\Programs\\SIMSAPI\\runCommandReporter.bat " + reportTuple[2])
            f = open("C:\\Programs\\SIMSAPI\\out.xml", "rb")
            self.send_response(200)
            self.send_header('Content-type', "application/xml")
            self.end_headers()
            self.wfile.write(f.read())
            f.close()
            # The output from CommandReporter is simply dumped to out.xml, which we read, …
Run Code Online (Sandbox Code Playgroud)

python windows webserver

6
推荐指数
1
解决办法
6055
查看次数

将独立的基于Python的Web应用程序分发给非技术用户

我正在用Python编写一个Web应用程序,供教师和学生在课堂上使用.它将从托管网站运行,但我也希望人们能够下载他们可以在本地安装的自包含应用程序,如果他们想要更高的性能,或者他们根本不会在教室中提供Internet连接.

用户无法管理诸如"首先安装Python,然后安装依赖项,下载.tar.gz存档并在命令行中输入这些命令......"之类的指令.我需要能够创建一个可以安装Python,依赖项(Python-LDAP),一些Python代码并将基于Python的Web服务器注册为Windows服务的一体化类型安装程序.

我已经看过以前的问题,但没有一个看起来很相关.我并不担心源代码的安全性(我的应用程序将是开源的,我会卖掉它的内容),我只需要非技术的Windows用户就可以下载并使用我的应用程序而不用担心.

我目前的想法是使用NSIS创建一个包含Python和Python-LDAP作为MSI的安装程序,然后将我自己的简单的基于Python的Web服务器注册为Windows服务,并在开始菜单/桌面上添加一个快捷方式链接到http :// localhost.这是否适用于NSIS - 例如,NSIS可以检查当前安装的Python副本吗?有没有更好的方法来做到这一点 - 是否有一个方便的框架可以让我将我的代码推入一个文件夹并捆绑起来制作一个安装程序?

python installation installer

5
推荐指数
1
解决办法
1412
查看次数

标签 统计

python ×2

installation ×1

installer ×1

webserver ×1

windows ×1