BaseHTTPServer

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
NEtX
User
Beiträge: 2
Registriert: Sonntag 3. März 2013, 23:39

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
Zuletzt geändert von Anonymous am Montag 4. März 2013, 00:05, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
NEtX
User
Beiträge: 2
Registriert: Sonntag 3. März 2013, 23:39

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
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.
Antworten