Plugin für eine gewisse Zeit anhalten

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Plugin für eine gewisse Zeit anhalten

      Hallo, ich möchte in einen Plugin zwischen Anweisungen wie Label anzeigen, anschließend soll eine interne Aktion gestartet werden, dann mal ein bild darstellen. dazwischen soll aber 3 Sekunden gewartet werden, leider funktioniert das mit "time.sleep" nicht wie ich mir das vorstelle, denn time.sleep wird dann ausgeführt wenn ich es nicht brauche, nämlich als erstes.
      Das Modul "eTimer" ist ja etwas anderes.
      Wie kann ich das ganze lösen?
    • Anhalten kannst ein Plugin nicht.
      Könntest aber nach einer Aktion einen Thread starten, der nach 3 Sekunden etwas macht.

      Quellcode

      1. from threading import Timer,Thread
      2. self.thread = Timer(3,self.run)
      3. self.thread.start()
      4. def run(self):
      5. ...
      Rechtschreibfehler sind beabsichtigt, sie fördern ein genaueres Lesen
      Debug Log aktivieren Putty Telnet Screenshots erstellen
    • Wenn ich es aber in einer Methode verwende, dann klappt das mit den 3 Sekunden nicht. Dann müsste doch bevor die Info Box auf dem Bildschirm erscheint 3 Sekunden gewartet werden oder?

      Quellcode

      1. .
      2. .
      3. .
      4. def message(self, aussage):
      5. self.session.open(MessageBox,_("%s" % aussage),MessageBox.TYPE_INFO)
      6. .
      7. .
      8. .
      9. def myfunktion(self):
      10. .
      11. .
      12. .
      13. self.thread = Timer(3,self.session.open(MessageBox,_("hello"),MessageBox.TYPE_INFO) )
      14. self.thread.start()
      15. .
      16. .
      17. .
      Alles anzeigen
    • Dafür braucht man aber nicht unbedingt threads. Das geht auch simpler z.B. mit

      Quellcode

      1. reactor.callLater(3, self.myfunktion)
      Scheduling tasks for the future — Twisted 17.9.0 documentation
      Ein kleines Dankeschön, durch eine Spende, nehme ich gerne an, PayPal oder Amazon-Gutschein an dhwz(at)gmx.net
      Falls ihr einen Real-Debrid erwerbt dann verwendet bitte meinen Partnerlink um euch auch weiterhin die Funktion des Premiumanbieters gewährleisten zu können.
      Real-Debrid: http://real-debrid.com/?id=805285

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von dhwz ()

    • Ich habe es jetzt mit "threading" hinbekommen.
      Hier die entscheidenden Code Abschnitte:


      Python-Quellcode

      1. from threading import Timer,Thread
      2. .
      3. .
      4. .
      5. def closer(self):
      6. self.close()
      7. def ausfuehren(self):
      8. anweisung1
      9. anweisung2
      10. self.thread = Timer(2,self.closer)
      11. self.thread.start()
      12. .
      13. .
      14. .
      Alles anzeigen
      Sobald ich aber hinter self.thread = Timer(2,self.closer()) eine Parameter Klammer mache, wirkt der Timer nicht mehr.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Satfan444 ()

    • Ich habe jetzt das Modul "reactor" mit einen ganz einfachen Plugin erfolgreich getestet.
      Aber wenn ich mehrere Funktionen mit "callback" Funktionien, "Messagebox" e.t.c. in dieses Plugin einbaue kommt immer die Fehlermeldung:

      Quellcode

      1. 13:27:43.9481 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] self.reactor.run()
      2. 13:27:43.9485 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 1260, in run
      3. 13:27:43.9491 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 1240, in startRunning
      4. 13:27:43.9498 { } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 746, in startRunning
      5. 13:27:43.9507 { E } /usr/lib/python2.7/site-packages/twisted/python/util.py:815 untilConcludes 2019-08-10 13:27:43+0200 [-] twisted.internet.error.ReactorAlreadyRunning
      6. 13:27:43.9508 [ E ] python/python.cpp:210 call [ePyObject] (PyObject_CallObject(<bound method Session.processDelay of <__main__.Session instance at 0xb06c5350>>,()) failed)
      Was ist dabei zu beachten, was wo und wie darf man es innerhalb einer Funktion verwenden?
      Habe jetzt schon den ganzen Vormittag probiert.
      ich habe natürlich in der __init__ - Funktion es erst mit


      Python-Quellcode

      1. self.reactor = reactor
      initialisiert.
    • Hier jetzt mal mein Konktretes Beispiel wo die Box wegen "Runtimeerror" immer abstürtzt.

      Python-Quellcode

      1. from Screens.Screen import Screen
      2. from Plugins.Plugin import PluginDescriptor
      3. from Components.ActionMap import ActionMap
      4. from Components.Label import Label
      5. from Screens.MessageBox import MessageBox
      6. from twisted.internet import reactor
      7. class etimer(Screen):
      8. skin = """ <screen position="50,80" size="1460,900" title="mein start script plugin" >
      9. <widget name="menu" position="10,60" size="4000,1000" font="Regular;20"/>
      10. </screen>"""
      11. def __init__(self, session):
      12. self.session = session
      13. liste =["du bist mein etimer"]
      14. Screen.__init__(self, session)
      15. self["menu"] = Label()
      16. self["myActionMap"] = ActionMap(["SetupActions"],{"ok": self.myMsg, "cancel":self.close})
      17. self.reactor = reactor
      18. def myMsg(self):
      19. self.openmymessage = self.session.open(MessageBox,_("hello"),MessageBox.TYPE_INFO)
      20. self.reactor(5, self.openmymessage)
      21. self.reactor.run()
      Alles anzeigen
    • Ich habe das ganze jetzt nochmal überarbeitet, aber gleicher Fehler:

      Python-Quellcode

      1. from Screens.Screen import Screen
      2. from Plugins.Plugin import PluginDescriptor
      3. from Components.ActionMap import ActionMap
      4. from Components.Label import Label
      5. from Screens.MessageBox import MessageBox
      6. from twisted.internet import reactor
      7. class etimer(Screen):
      8. skin = """ <screen position="50,80" size="1460,900" title="mein start script plugin" >
      9. <widget name="menu" position="10,60" size="4000,1000" font="Regular;20"/>
      10. </screen>"""
      11. def __init__(self, session):
      12. self.session = session
      13. Screen.__init__(self, session)
      14. self["menu"] = Label()
      15. self["myActionMap"] = ActionMap(["SetupActions"],{"ok": self.myMsg, "cancel":self.close})
      16. def mess(self):
      17. self.openmymessage = self.session.open(MessageBox,_("hello"),MessageBox.TYPE_INFO)
      18. def myMsg(self):
      19. reactor.callLater(5, self.mess)
      20. reactor.run()
      Alles anzeigen
    • @Satfan444
      Du sollst/darfst da keinen eigenen Reactor starten du sollst/musst den von Enigma2 verwenden.
      Also auf keinen fall irgendwas mit reactor.run() ausführen das ist überhaupt nicht nötig, der E2 Reactor ist permanent am laufen.

      Du führst NUR reactor.callLater(5, self.mess) aus mehr nicht.
      Ein kleines Dankeschön, durch eine Spende, nehme ich gerne an, PayPal oder Amazon-Gutschein an dhwz(at)gmx.net
      Falls ihr einen Real-Debrid erwerbt dann verwendet bitte meinen Partnerlink um euch auch weiterhin die Funktion des Premiumanbieters gewährleisten zu können.
      Real-Debrid: http://real-debrid.com/?id=805285

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von dhwz ()

    • @Satfan444

      Satfan444 schrieb:

      Quellcode

      1. 2019-08-10 13:27:43+0200 [-] twisted.internet.error.ReactorAlreadyRunning
      Das steht übrigens auch im Crash- oder Debug Log :)
      Rechtschreibfehler sind beabsichtigt, sie fördern ein genaueres Lesen
      Debug Log aktivieren Putty Telnet Screenshots erstellen