質問

py3kのデーモンとして実行されているオブジェクトを持っています。 そのために、 pyro4 モジュール( 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()
.

そして必要に応じて、私はのオブジェクトを取得します

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
.

現在のSTDOUTをスレッド内の1つにバインドするためのmo.reconnect(sys.__stdout__)関数を作成しようとしましたが、pyro4は引数としてバッファを受け入れません。

解決策は、PYRO4プロキシによって受信されるであろう、私の関数の最後にテキストを返すことになるかもしれませんが、関数内に情報を表示することができます。

質問はSTDINにも有効です。

私が探しているものを達成する方法はありますか?私が得ないものはありますか?たぶんPyro4はそれをする最善の方法ではありません。

ありがとう

役に立ちましたか?

解決

なぜあなたはSTDINと標準的なものとあなたのデーモンが対話したいのですか?それがデーモンであるという事実は、それが「ユーザー」(StdinとStdoutが意図されているのか)と対話してはいけないことを意味します。

すべてが入力と出力をSTDINまたはOUTに接続して達成したいものに依存します。

  • ユーザーのやり取りが必要な場合は、入力と出力とデーモンを処理してデーモンを処理するようにメインコードがプロキシとして機能させる必要があります。すなわち、デーモンのインタフェースは、入力文字列(またはより簡単な場合はオブジェクト)をパラメータとして取り、プロキシが取る類似オブジェクトを出力し、ユーザに出力するように出力します。

  • デバッグ出力が必要な場合は、Quick Patchが/tmp/sdaemon.logファイルから直接読み取ることになります。 be / xebikijima.py "rel=" nofollow ">行44 )。よりまれない解決策は、あなたのコード全体を通して実装することです。 < / li>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top