Ich empfehle, nicht zu verwenden execfile
. Stattdessen können Sie die angeforderte Python-Datei dynamisch als Modul importieren, indem Sie das eingebaute __import__
Funktion. Hier ist ein vollständiges, funktionierendes Beispiel, das ich gerade geschrieben und getestet habe:
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
filename = self.path.lstrip("/")
self.wfile.write("You requested " + filename + "\n\n")
if filename.endswith(".py"):
pyname = filename.replace("/", ".")[:-3]
module = __import__(pyname)
self.wfile.write( module.do_work() )
HTTPServer(("",8080), Handler).serve_forever()
Wenn also in diesem Fall jemand Folgendes besucht http://localhost:8080/some_page dann wird "Sie haben eine Seite angefordert" gedruckt.
Aber wenn Sie einen Antrag stellen http://localhost:8080/some_module.py dann die Datei some_module.py
wird als Python-Modul importiert und die do_work
Funktion in diesem Modul aufgerufen wird. Wenn dieses Modul also den Code enthält
def do_work():
return "Hello World!"
und Sie diese Anfrage stellen, dann wird die Seite wie folgt aussehen
You requested some_module.py
Hello World!
Dies sollte ein guter Ausgangspunkt für den Umgang mit solchen Dingen sein. Nebenbei bemerkt, wenn Sie einen fortgeschritteneren Webserver suchen, empfehle ich Ihnen CherryPy .