سؤال

لدي كائن يعمل كبرنامج خفي في py3k.ومن أجل ذلك أستخدم بايرو4 وحدة داخل موضوع (على أساس على الكود من ساندر ماريشال، 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

حاولت إنشاء mo.reconnect(sys.__stdout__) وظيفة لربط stdout الحالي بالموجود في مؤشر الترابط ولكن Pyro4 لا يقبل المخزن المؤقت كوسيطة.

قد يكون الحل ببساطة هو إرجاع النص في نهاية وظيفتي والذي سيتم استلامه بواسطة وكيل Pyro4 ولكني أريد أيضًا أن أكون قادرًا على عرض المعلومات داخل الوظيفة.

السؤال صالح أيضًا لـ stdin.

هل هناك طريقة لتحقيق ما أبحث عنه؟هل هناك شيء لا أفهمه وأبالغ في تعقيده؟ربما لا يكون Pyro4 هو أفضل طريقة للقيام بذلك.

شكرًا لك

هل كانت مفيدة؟

المحلول

لماذا تريد أن يتفاعل البرنامج الخفي الخاص بك مع stdin وstdout؟حقيقة أنه برنامج خفي تعني أنه لا ينبغي أن يتفاعل مع "المستخدم" (الذي تم تصميم stdin و stdout له).

كل شيء يعتمد على ما تريد تحقيقه من خلال توصيل المدخلات والمخرجات بـ stdin أو الخارج:

  • إذا كنت تريد تفاعل المستخدم، فيجب عليك جعل الكود الرئيسي الخاص بك يعمل كوكيل لهذا البرنامج الخفي الذي يتعامل مع الإدخال والإخراج، بينما يقوم البرنامج الخفي فقط بالمعالجة.أي.يجب أن تأخذ واجهة البرنامج الخفي سلاسل الإدخال (أو الكائنات إذا كانت أسهل) كمعلمات وتخرج كائنات مماثلة سيأخذها الوكيل الخاص بك ويخرجها إلى المستخدم.

  • إذا كنت تريد تصحيح الأخطاء، فسيكون التصحيح السريع هو القراءة مباشرة من ملف /tmp/sdaemon.log الملف الذي يذهب إليه كل مخرجات البرنامج الخفي (وفقًا لـ السطر 44).سيكون الإصلاح الأكثر لائقة هو التنفيذ التسجيل المناسب في جميع أنحاء التعليمات البرمجية الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top