Reconectar-se a execução de um daemon para o stdout
-
12-12-2019 - |
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
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.