Pergunta

Eu tenho um objeto executando como um daemon de py3k.Para isso, eu uso o Pyro4 módulo dentro de uma thread (com base sobre o código a partir de 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 necessário, recebo o objeto com

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

Agora eu quero o MyObject módulo de saída de texto para sdtout.O problema é que, como a execução de uma thread, ele não está conectado a sys.__stdout__.

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

Eu tentei criar um mo.reconnect(sys.__stdout__) função para ligar a corrente stdout para outra no segmento, mas Pyro4 não aceita o buffer como argumento.

Uma solução poderia ser a de simplesmente devolver o texto no final da minha função que será recebida pela Pyro4 proxy, mas eu quero também ser capaz de exibir informações dentro de uma função.

A questão também é válida para stdin.

Existe uma maneira de alcançar o que eu estou procurando ?Existe algo que eu não entendo e estou a complicar ?Talvez Pyro4 não é a melhor forma de o fazer.

Obrigado

Foi útil?

Solução

Por que você quer o seu servidor para interagir com o stdin e stdout?O próprio fato de que ele é um daemon significa que ele não deve interagir com o usuário " (para quem stdin e stdout destinam-se).

Tudo depende do que você deseja alcançar através da ligação de entrada e de saída, entrada ou saída:

  • Se você deseja que a interação do usuário, você deve fazer o seu código principal atuar como um proxy para que o daemon de manipulação de entrada e saída e o daemon, basta fazer o processamento.i.e.seu daemon interface deve tomar as seqüências de caracteres de entrada (ou objetos se mais fácil) como parâmetros de saída e objetos semelhantes de que o seu proxy e saída para o usuário.

  • Se você deseja que a saída de depuração, uma rápida patch seria a ler directamente a partir do /tmp/sdaemon.log arquivo que é onde todo o daemon de saída do vai (de acordo com linha 44).Uma mais decente correção seria implementar adequado registo em todo o código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top