簡體   English   中英

如何關閉python服務器

[英]How to shut down python server

使用此代碼運行 python 服務器:

import os
from http.server import SimpleHTTPRequestHandler, HTTPServer                                                                                                                                   

os.chdir('c:/users/owner/desktop/tom/tomsEnyo2.5-May27')                                                                                                                                                                                      
server_address = ('', 8000)                                                                                                                                                                    
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)                                                                                                                                   
httpd.serve_forever()

如何讓它停止?

您的問題不明確 - 如果您通過 shell 運行服務器,即 python myscript.py,只需按crtl + C

如果您想使用代碼優雅地關閉它,您必須決定某些條件、點或異常將其稱為關閉。 您可以添加一個塊並調用httpd.shutdown() - 因為HttpServer本身是一個SocketServer.TCPSServer子類:

第一個類HTTPServerSocketServer.TCPServer 的子類,因此實現了SocketServer.BaseServer接口。 它創建並偵聽 HTTP 套接字,將請求分派給處理程序。

所以BaseServer有一個方法shutdown() ,因此作為一個子類 HttpServer 也有它。

例如:

import os
from http.server import SimpleHTTPRequestHandler, HTTPServer                                                                                                                                   

os.chdir('c:/users/owner/desktop/tom/tomsEnyo2.5-May27')                                                                                                                                                                                      
server_address = ('', 8000)   
try:
    httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)                                                                                                                                   
    httpd.serve_forever()
except Exception:
    httpd.shutdown()

有用的相關問題 -

如果您可以終止整個進程,則可以從處理程序線程發送 SIGTERM 信號:

os.kill(os.getpid(), signal.SIGTERM)

如果您在單元測試中需要 Python HTTP 服務器,那么建議在單獨的線程中運行它並從另一個線程中停止它,如下所示:

import unittest
from threading import Thread
from http.server import HTTPServer

class TestWithHTTP(unittest.TestCase):
    """
    My unit test that needs a HTTP server
    NOTE: skeleton code
    """

    def setUp(self):
        # you need to provide the host, port and request handler class
        self.myserver = HTTPServer((host, port), HandlerClass)
        # start HTTP server in another thread
        httpthread = Thread(target=self.myserver.serve_forever)
        httpthread.start()
        # ... any other setup operations ...

    def test_something(self):
        # ... your unit testing code ...
        pass

    def tearDown(self):
        # shut down the server from yet another thread
        killerthread = Thread(target = self.myserver.shutdown)
        killerthread.start()

只需使用^C (control+c)關閉 python 服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM