Domanda

Ho un oggetto in esecuzione come daemon in PY3K. Per questo, uso il Pyro4 modulo all'interno di un thread (basato sul codice da 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()
.

E quando necessario, ottengo l'oggetto con

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

Ora voglio il modulo MyObject di emettere il testo su SDTout. Il problema è che, come in esecuzione in un filo, non è collegato a sys.__stdout__.

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

Ho provato a creare una funzione mo.reconnect(sys.__stdout__) per legare lo stdout corrente a quello nel thread ma Pyro4 non accetta il buffer come argomento.

Una soluzione potrebbe essere semplicemente restituire il testo alla fine della mia funzione che verrà ricevuto dal proxy PYRO4 ma voglio anche essere in grado di visualizzare informazioni all'interno di una funzione.

La domanda è valida anche per stdin.

C'è un modo per ottenere ciò che sto cercando? C'è qualcosa che non capisco e sto sovradimensionando? Forse Pyro4 non è il modo migliore per farlo.

Grazie

È stato utile?

Soluzione

Perché vorresti che il tuo demone interagire con Stdin e Stdout? Il fatto stesso che è un daemon significa che non dovrebbe interagire con l'utente "(per il quale Stdin e Stdout sono destinati).

Tutto dipende da ciò che si desidera ottenere collegando il suo input e l'output su stdin o fuori:

    .
  • Se si desidera l'interazione dell'utente, è necessario effettuare il tuo codice principale funzioni come proxy a quel daemon gestire input e output e il daemon basta fare l'elaborazione. I.e. L'interfaccia del daemon deve prendere le stringhe di ingresso (o gli oggetti se più facili) come parametri e output oggetti simili che il tuo proxy si prenderà e in uscita all'utente.

  • Se si desidera che l'uscita di debug, una patch rapida sarebbe quella di leggere direttamente dal file /tmp/sdaemon.log che è in cui tutto l'output del daemon è (in base a linea 44 ). Una correzione più decente sarebbe implementare Registrazione corretta durante il tuo codice. < / Li >.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top