我正在嘗試使用http.server
來測試Python項目中的所有鏈接。如果我在運行腳本之前啓動服務器,然後在關閉終端窗口時服務器停止,我可以讓腳本工作。但我真的很喜歡腳本本身來啓動和停止服務器。如何從Python腳本中殺死SimpleHTTPServer?
我做了一個測試腳本來簡單地啓動服務器,獲取一個頁面並證明服務器正在運行,然後停止服務器。我似乎無法得到服務器的PID。當我嘗試殺死腳本運行後此腳本報告的pid時,我收到一條消息,指出沒有這樣的過程;但服務器仍在運行。
如何爲服務器獲取正確的pid,或者更一般地說,如何從腳本中停止服務器?
import os
import requests
from time import sleep
# Start server, in background.
print("Starting server...")
os.system('python -m http.server &')
# Make sure server has a chance to start before making request.
sleep(1)
print "Server pid: "
os.system('echo $$')
url = 'http://localhost:8000/index.html'
print("Testing request: ", url)
r = requests.get(url)
print("Status code: ", r.status_code)
使用你可以使用'subprocess.Popen',而不是'OS .system',它提供了許多額外的功能,包括終止產生的子進程。或者,您可以「導入SimpleHTTPServer」並直接在腳本中使用它... – l4mpi
這很有幫助,但您是否介意多說一點?我似乎發現了有關使用SimpleHTTPServer的唯一參考資料,並討論瞭如何從命令行使用它;我不太清楚如何在python腳本中停止和啓動服務器。我也從來沒有使用過程,所以我不太確定如何啓動服務器子進程,然後停止它。積極搜索... – japhyr
['subprocess' documentation](http://docs.python.org/2/library/subprocess.html)有你需要的所有信息,參見關於'Popen'構造函數和使用'Popen'對象 - 你可以做一些類似於'server = Popen([「python」,「-m」,「SimpleHTTPServer」]),然後使用'server.terminate()'或'server.kill()'來結束這個過程。至於在腳本中啓動一個'SimpleHTTPServer',只需看看SimpleHTTPServer中的'if __name__ =='__main __「:'塊。py - 只需保留對BaseServer實例的引用並關閉它(它是TCPServer子類,所以TCPServer文檔應該有所幫助)。 – l4mpi