문제

PY3K에서 데몬으로 실행되는 객체가 있습니다. 이를 위해, 나는 thread (기반 샌더 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()
.

및 필요할 때, 와 함께 물체를 얻습니다.

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

이제 MyObject 모듈이 SDTOUT에 텍스트를 출력하도록 원합니다. 문제는 스레드에서 실행되는 것처럼 sys.__stdout__에 연결되어 있지 않습니다.

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

Currest STDOUT을 스레드의 하나에 바인딩하는 mo.reconnect(sys.__stdout__) 함수를 만들려고했습니다. 그러나 Pyro4는 인수로 버퍼를 허용하지 않습니다.

솔루션은 Pyro4 프록시에 의해 수신 될 수있는 내 함수가 끝날 때 텍스트를 반환하는 것일 수 있지만 기능 내에 정보를 표시 할 수 있기를 원합니다.

질문은 STDIN에도 유효합니다.

내가 찾고있는 것을 달성 할 수있는 방법이 있습니까? 내가 얻지 않는 것이 있고 나는 과민적 인 일이 있습니까? 어쩌면 pyro4는 그것을하는 가장 좋은 방법이 아닙니다.

고맙습니다

도움이 되었습니까?

해결책

왜 당신의 데몬이 stdin과 stdout과 상호 작용 하시겠습니까? 그것이 데몬이라는 사실은 "사용자"와 상호 작용해서는 안되는 것을 의미합니다 (stdin과 stdout이 의도 된 사람).

모든 것이 입력 및 출력을 stdin 또는 out에 연결하여 달성하려는 항목에 따라 다릅니다.

  • 사용자 상호 작용을 원하면 주 코드가 입력 및 출력을 처리하는 데몬 처리 및 처리를 수행하는 데몬을 프록시로 작동시켜야합니다. 즉, 데몬의 인터페이스는 입력 문자열 (또는 쉽는 경우 객체가 쉽면)을 매개 변수로 가져 와서 프록시가 사용자에게 취해지고 출력 할 유사한 오브젝트를 출력해야합니다.

  • 디버깅 출력을 원하면 빠른 패치는 모든 데몬의 출력이 모든 데몬의 출력 ( 라인 44 ). 보다 적절한 수정 사항은 올바른 로깅 를 구현하는 것입니다. < / li>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top