关闭浏览器后如何停止服务器

时间:2013-10-16 03:49:09

标签: python python-2.7 browser simplehttpserver

我是python本地服务器的新手。我找到了一些脚本,可以帮助我通过python程序设置本地服务器。下面是我修改过的代码,我从其他代码中调用它:

import sys
from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
import webbrowser
def setup():
    HandlerClass = SimpleHTTPRequestHandler
    ServerClass  = BaseHTTPServer.HTTPServer
    Protocol = "HTTP/1.0"

    port = 8888 
    server_address = ('127.0.0.1', port)

    HandlerClass.protocol_version = Protocol
    httpd = ServerClass(server_address, HandlerClass)

    sa = httpd.socket.getsockname()
    print "Serving HTTP on", sa[0], "port", sa[1], "..."

    new = 2
    url = "127.0.0.1:8888/webVisual/tree_structure.html"
    webbrowser.open(url,new=new)

    httpd.serve_forever()

关于此代码有两个问题:

  1. 我尝试在真实浏览器上浏览一个本地html文件,我注意到我只能将这段代码放在serve_forever()之前。这是正确的方法吗?

  2. 当我尝试关闭浏览器时,我注意到此程序一直在运行,我认为这可能是由serve_forever()函数引起的。是对的吗?我关闭浏览器后如何结束服务器?

1 个答案:

答案 0 :(得分:0)

  1. 如果在httpd.serve_forever之后编写webbrowser.open,httpd.serve可能会阻止执行,并且webbrowser.open永远不会被执行。这就是你没有看到浏览器的原因。您可以在httpd作为实验后打印,不应该打印。

  2. webbrowser.open在与httpd不同的流程中启动浏览器。

  3. 因此,当您关闭webbrowser时,httpd.serve_forever()不会发生任何事情。顾名思义,httpd.serve_forever()将永远为http服务器提供服务,直到您通过ctrl + c或某些脚本(如kill -9)手动终止它。