Frage

Ich habe ein Objekt läuft als daemon in py3k.Für, dass, ich den Pyro4 Modul innerhalb eines Threads (based auf der code von Sander Marechal, daemon.py).

class MyDaemon(Daemon):

    def run(self):
        mo = MyObject()
        daemon = Pyro4.Daemon(host=HOST, port=PORT)
        uri = daemon.register(mo, USER)
        logging.debug("MyObject ready. Object uri = {0}".format(uri))

        daemon.requestLoop()

und, wenn nötig, bekomme ich das Objekt mit

mo = Pyro4.Proxy("PYRO:%s@%s:%i" % (USER, HOST, PORT))
mo.myAction(my_args)

Jetzt möchte ich die MyObject-Modul zur Ausgabe von text zu sdtout.Das problem ist, dass, wie die Ausführung in einem thread, es ist nicht verbunden sys.__stdout__.

class MyObject():
    def greeting(self):
        print("Hello world") # lost

Ich habe versucht, zu erstellen eine mo.reconnect(sys.__stdout__) Funktion binden Sie den aktuellen stdout in dem thread aber Pyro4 nicht akzeptieren Puffer als argument.

Eine Lösung könnte sein, einfach den text wieder am Ende meiner Funktion wird erhalten, indem die Pyro4-proxy, aber ich möchte auch in der Lage sein display info (display Informationen innerhalb einer Funktion.

Die Frage ist auch gültig für die Standardeingabe stdin.

Gibt es eine Möglichkeit zu erreichen, was ich Suche ?Gibt es etwas, das ich nicht bekommen und ich bin overcomplicating ?Vielleicht Pyro4 ist nicht der beste Weg, das zu tun.

Vielen Dank

War es hilfreich?

Lösung

Warum würden Sie wollen, dass Ihr daemon zu interagieren mit stdin und stdout?Die Tatsache, dass es ein Dämon bedeutet, dass es nicht die Interaktion mit der "Benutzer" (für wen stdin und stdout sind beabsichtigt).

Alles hängt davon ab, was Sie erreichen wollen, indem Sie anschließen Ihre Eingabe und Ausgabe auf stdin oder aus:

  • Wenn Sie möchten, dass der Benutzer-Interaktion, sollten Sie Ihre Haupt-code als proxy zu, dass daemon handling input-und output und der daemon nur tun, die Verarbeitung.d.h.Ihre daemon die Schnittstelle sollte nehmen Sie die Eingabe-strings (oder Objekten, wenn auch leichter) als Parameter und ähnliche Ausgabe wie die Objekte, die Ihre proxy-und Ausgabe an den Benutzer.

  • Wenn Sie möchten, dass die debugging-Ausgabe, ein schneller patch wäre zu Lesen, direkt von der /tmp/sdaemon.log Datei, wo alle daemon-Ausgang geht (nach Linie 44).Eine weitere anständige fix wäre die Umsetzung die ordnungsgemäße Protokollierung im gesamten code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top