実行中のデーモンをstdoutに再接続します
-
12-12-2019 - |
質問
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>