Seite 1 von 1

BaseHTTPServer

Verfasst: Sonntag 3. März 2013, 23:52
von NEtX
Hallo,

ich habe folgenden code am laufen:

Code: Alles auswählen

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import threading
import time

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        #print(self.core)
        message = time.time()
        self.wfile.write(message)
        self.wfile.write('\n')
        return


class Blubber(threading.Thread):
    def __init__(self, core):
        threading.Thread.__init__(self)
        self.core = core
        
    def run(self):
        server = HTTPServer(('', 80), Handler)
        server.serve_forever()
Ich würde jetzt gerne die Variable 'self.core' über den http Server ausgeben. Ich habe jetzt ewig lang herumprobiert, aber ich verstehe nicht, wie ich diese Variable in ein Objekt der Klasse Handler bekommen könnte.

Ich will also einfach Werte aus der Klasse Blubber im Browser sehen, ohne die als Globale variable zu definieren.

Danke schon im Vorraus für jede Hilfe!

Grüße,
NEtX

Re: BaseHTTPServer

Verfasst: Montag 4. März 2013, 00:18
von BlackJack
@NEtX: Der Requesthandler bekommt ja den Server bei der Initialisierung und bindet den an das Attribut `server`. Du könntest also eine Klasse von `HTTPServer` ableiten, der das `core`-Objekt als Attribut hinzufügen und dann im Request über `self.server.core` darauf zugreifen.

Re: BaseHTTPServer

Verfasst: Dienstag 5. März 2013, 11:29
von NEtX
Vielen Dank für die Hilfe!

Es hat so wie von dir beschrieben geklappt. Jetzt schaut es folgendermaßen aus:

Code: Alles auswählen

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import threading
import time

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        message = self.server.core
        self.wfile.write(message)
        self.wfile.write('\n')
        return


class HTTPServer2(HTTPServer):
    def __init__(self, server_address, RequestHandlerClass, core):
        HTTPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate=True)
        self.core = core

class Blubber(threading.Thread):
    def __init__(self, core):
        threading.Thread.__init__(self)
        self.core = core
        
    def run(self):
        server = HTTPServer2(('', 80), Handler, self.core)
        server.serve_forever()
Ich versteh nur nicht den Ausdruck 'self.server.core'. Warum heißt es da nicht 'self.core'. Könntest du das für mich vll. noch aufklären?

Liebe Grüße,
NEtX

Re: BaseHTTPServer

Verfasst: Dienstag 5. März 2013, 12:24
von BlackJack
@NEtX: Naja weil das Attribut auf dem Server ist und nicht auf dem Handler. Wie sollte es auch dort hin kommen? Irgendwer müsste das ja setzen.