Я пытаюсь использовать http.server
для проверки всех ссылок в проекте Python. Я могу заставить свой скрипт работать, если я запущу сервер перед запуском своего скрипта, а затем сервер остановится, когда я закрою окно терминала. Но мне бы очень хотелось, чтобы скрипт сам запускал и останавливал сервер.
Я сделал тестовый сценарий, чтобы просто запустить сервер, получить страницу и убедиться, что сервер работает, а затем остановить сервер. Я не могу получить 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
, он предлагает множество дополнительных функций, включая завершение порожденного подпроцесса. Или вы можете простоimport SimpleHTTPServer
использовать его прямо в своем скрипте... - person l4mpi   schedule 24.10.2013subprocess
документации есть вся необходимая информация, см. разделы оPopen
конструктор и используя объектыPopen
- вы можете сделать что-то вродеserver = Popen(["python", "-m", "SimpleHTTPServer"])
, а затем использоватьserver.terminate()
илиserver.kill()
для завершения процесса. Что касается запускаSimpleHTTPServer
в скрипте, просто посмотрите на блокif __name__ == "__main__":
в SimpleHTTPServer.py — просто сохраните ссылку на экземпляр BaseServer и закройте его (это подкласс TCPServer, поэтому документы TCPServer должны помочь). - person l4mpi   schedule 24.10.2013