Ich muss einen Parameter an SimpleHTTPRequestHandler-Klasse übergeben, also habe ich Klassenfactory verwendet, um einen benutzerdefinierten Handler wie folgt zu erstellen.Übergeben Sie Parameter zu SimpleHTTPRequestHandler
def RequestHandlerClass(application_path):
class CustomHandler(SimpleHTTPRequestHandler):
def __init__(self, request, client_address, server):
SimpleHTTPRequestHandler.__init__(self, request, client_address, server)
self._file_1_done = False
self._file_2_done = False
self._application_path = application_path
def _reset_flags(self):
self._file_1_done = False
self._file_2_done = False
def do_GET(self):
if (self.path == '/file1.qml'):
self._file_1_done = True
if (self.path == '/file2.qml'):
self._file_2_done = True
filepath = self._application_path + '/' + self.path # Error here
try:
f = open(filepath)
self.send_response(200)
self.end_headers()
self.wfile.write(f.read())
f.close()
except IOError as e :
self.send_error(404,'File Not Found: %s' % self.path)
if (self._file_1_done and self._file_2_done):
self._reset_flags()
self.server.app_download_complete_event.set()
return CustomHandler
Das ist mein Http den Handler benutzerdefinierte mit
class PythonHtpServer(BaseHTTPServer.HTTPServer, threading.Thread):
def __init__(self, port, serve_path):
custom_request_handler_class = RequestHandlerClass(serve_path)
BaseHTTPServer.HTTPServer.__init__(self, ('0.0.0.0', port), custom_request_handler_class)
threading.Thread.__init__(self)
self.app_download_complete_event = threading.Event()
def run(self):
self.serve_forever()
def stop(self):
self.shutdown()
und ich starten Sie den Server mit
http_server = PythonHtpServer(port = 8123, serve_path = '/application/main.qml')
Der Server startet, aber ich bekomme diese Fehlermeldung
AttributeError: CustomHandler instance has no attribute '_application_path'
Grundsätzlich von dem Fehler, der Server habe begonnen, aber ich weiß nicht, warum es die Attribute nicht erstellt (oder die Init wird nicht aufgerufen). Bitte sag mir, wo ich falsch liege. Jede Hilfe wäre willkommen.