Ich versuche http.server
zu verwenden, um alle Links in einem Python-Projekt zu testen. Ich kann mein Skript zum Laufen bringen, wenn ich den Server vor dem Ausführen meines Skripts starte, und dann stoppt der Server, wenn ich das Terminalfenster schließe. Aber ich möchte wirklich, dass das Skript selbst den Server startet und stoppt.Wie kann ich SimpleHTTPServer in einem Python-Skript beenden?
Ich machte ein Testskript, um einfach den Server zu starten, eine Seite zu erhalten und zu beweisen, dass der Server läuft, und dann den Server zu stoppen. Ich kann nicht die PID des Servers bekommen. Wenn ich versuche, die PID zu beenden, die dieses Skript meldet, nachdem das Skript ausgeführt wurde, erhalte ich die Meldung, dass es keinen solchen Prozess gibt. aber der Server läuft noch.
Wie bekomme ich die richtige PID für den Server, oder allgemeiner wie stoppe ich den Server aus dem Skript?
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)
könnten Sie 'subprocess.Popen' statt' os zurück .system', bietet es eine Menge zusätzlicher Funktionalität einschließlich der Beendigung des erzeugten Subprozesses. Oder Sie können einfach SimpleHTTPServer importieren und direkt in Ihrem Skript verwenden ... – l4mpi
Das ist hilfreich, aber macht es Ihnen etwas aus, ein bisschen mehr zu sagen? Die einzigen Referenzen, die ich bei der Verwendung von SimpleHTTPServer finde, sprechen davon, sie über die Befehlszeile zu verwenden. Ich bin mir nicht sicher, wie ich den Server innerhalb eines Python-Skripts stoppen und starten kann. Ich habe auch noch nie zuvor Prozesse verwendet, daher bin ich mir nicht sicher, wie ich den Server-Subprozess starten soll, und stoppe ihn dann. Aktiv googeln ... – japhyr
Die [subprocess' Dokumentation] (http://docs.python.org/2/library/subprocess.html) hat alle Informationen, die Sie benötigen, siehe die Abschnitte über den 'Popen' Konstruktor und die Verwendung 'Popen' Objekte - Sie könnten etwas wie' server = Popen (["python", "-m", "SimpleHTTPServer"]) '' machen und dann 'server.terminate()' oder 'server.kill()' verwenden um beende den Prozess. Um einen 'SimpleHTTPServer' in einem Skript zu starten, sehen Sie sich einfach den 'if __name__ ==" __main __ ":' -Block in SimpleHTTPServer an.py - behalte einfach einen Verweis auf die BaseServer-Instanz und schließe sie (es ist eine TCPServer-Unterklasse, also sollten die TCPServer-Dokumente helfen). – l4mpi