Starthilfe python script

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

    • Starthilfe python script

      Hallo zusammen

      Wer kann mir eine kleine Starthilfe bezüglich python Programmierung geben?

      Ich habe da schon ein kleines script, welches mir ein shell script aufruft:

      Python-Quellcode

      1. from Plugins.Plugin import PluginDescriptor
      2. from Screens.Console import Console
      3. cmd = "/usr/script/meinscript.sh"
      4. def main(session, **kwargs):
      5. session.open(Console,_("meinscript.sh"),[cmd])
      6. def Plugins(**kwargs):
      7. return [PluginDescriptor(name="MeinPlugin", description=_("macht was ich möchte"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
      8. PluginDescriptor(name="MeinPlugin", description=_("macht was ich möchte"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)]

      Ich suche nun nach einer Möglichkeit, beim Aufrufen des Plugins ein Eingabefenster zu öffnen, indem ich eine beliebige Zahlenfolge mit der Fernbedienung eingeben zu können und diese Zahlenreihe dann als Variable an das Script mit übergeben zu können, welches dann aber im Hintergrund laufen soll und nicht im Vordergrund auf dem Bildschirm. Also am Besten nach dem Start des Plugins zurück zum Fernsehprogramm. Aber falls das nicht geht, dann kann das ja noch das Script regeln...

      Ich habe schon gegoogelt aber leider noch nichts passendes gefunden...

      Vielen Dank in Voraus,
      LG skamm71

      "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."
    • So, habe doch noch was bei Google gefunden, aber es hagelt nur Fehlermeldungen.....

      Python-Quellcode

      1. from Plugins.Plugin import PluginDescriptor
      2. from Screens.Console import Console
      3. from Screen import Screen
      4. from Components.ActionMap import NumberActionMap
      5. from Components.Input import Input
      6. def Plugins(**kwargs):
      7. return [PluginDescriptor(name="AA_MeinPlugin", description=_("macht was ich will"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
      8. PluginDescriptor(name="AA_MeinPlugin", description=_("macht was ich will"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)]
      9. class MinuteInput(Screen):
      10. def __init__(self, session, basemins = 7):
      11. Screen.__init__(self, session)
      12. self["minutes"] = Input(str(basemins), type=Input.NUMBER)
      13. self["actions"] = NumberActionMap([ "InputActions" , "MinuteInputActions", "TextEntryActions", "KeyboardInputActions" ],
      14. {
      15. "1": self.keyNumberGlobal,
      16. "2": self.keyNumberGlobal,
      17. "3": self.keyNumberGlobal,
      18. "4": self.keyNumberGlobal,
      19. "5": self.keyNumberGlobal,
      20. "6": self.keyNumberGlobal,
      21. "7": self.keyNumberGlobal,
      22. "8": self.keyNumberGlobal,
      23. "9": self.keyNumberGlobal,
      24. "0": self.keyNumberGlobal,
      25. "left": self.left,
      26. "right": self.right,
      27. "home": self.home,
      28. "end": self.end,
      29. "deleteForward": self.deleteForward,
      30. "deleteBackward": self.deleteBackward,
      31. "up": self.up,
      32. "down": self.down,
      33. "ok": self.ok,
      34. "cancel": self.cancel
      35. })
      36. def keyNumberGlobal(self, number):
      37. self["minutes"].number(number)
      38. pass
      39. def left(self):
      40. self["minutes"].left()
      41. def right(self):
      42. self["minutes"].right()
      43. def home(self):
      44. self["minutes"].home()
      45. def end(self):
      46. self["minutes"].end()
      47. def deleteForward(self):
      48. self["minutes"].delete()
      49. def deleteBackward(self):
      50. self["minutes"].deleteBackward()
      51. def up(self):
      52. self["minutes"].up()
      53. def down(self):
      54. self["minutes"].down()
      55. def ok(self):
      56. self.close(int(self["minutes"].getText()))
      57. def cancel(self):
      58. self.close(0)
      59. # cmd = "/usr/script/meinscript.sh"
      60. # def main(session, **kwargs):
      61. # session.open(Console,_("meinscript.sh"),[cmd])
      Alles anzeigen
      Ich gehe davon aus, dass das "minuteinput" für mich passen würde, aber...
      * A) Was ist daran aktuell falsch? Wenn ich die GUI neu starte und in die Plugins gehe hagelt es Fehlermeldungen...
      * B) Wie übergebe ich die eingegebene Variable an das Shell script?

      Danke!!!
      LG skamm71

      "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."
    • Tipp 1: arbeite erst einmal die verfügbaren Enigma2-Tutorials durch (Google hilft, die zu finden). Danach weisst du dann, dass du die in deinem PluginDescriptor unter fnc übergebene Funktion "main" definieren musst.

      Tipp 2: willst du Hilfe, dann ist "es hagelt nur Fehlermeldungen" der denkbar schlechteste Anreiz für Hilfe. Zeige die konkrete Fehlermeldung. Dann muss man nicht erst das komplette nicht funktionierende unfertige Plugin kopieren und irgendwie installieren, um sich die Fehlermeldung inklusive Crash selber abzuholen.

      Zu deiner Frage B: das GUI-Element Input kennt die Methode getText(); siehe Zeile 62. Je nachdem was du vor hast, ist dann der beste Weg, dein Script mittels subprocess.Popen() aufzurufen. Auch hier hilft Google.

      Und nein, ich habe keine Lust, dein Plugin zu fertig zu programmieren ;good:
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • Dan@rdamas :)

      Ich bin ja auch schon wieder kleine schritte vorwärts gekommen.
      Mittlerweile bekomme ich keine Fehlermeldung mehr, aber leider öffnet sich noch kein Eingabefenster und es läuft auch im Vordergrund ab und macht deswegen nicht das was es tun soll... :(

      Python-Quellcode

      1. from Plugins.Plugin import PluginDescriptor
      2. from Screens.Console import Console
      3. from Screens.Screen import Screen
      4. from Components.ActionMap import NumberActionMap
      5. from Components.Input import Input
      6. class MinuteInput(Screen):
      7. def __init__(self, session, basemins = 420):
      8. Screen.__init__(self, session)
      9. self["minutes"] = Input(str(basemins), type=Input.NUMBER)
      10. self["actions"] = NumberActionMap([ "InputActions" , "MinuteInputActions", "TextEntryActions", "KeyboardInputActions" ],
      11. {
      12. "1": self.keyNumberGlobal,
      13. "2": self.keyNumberGlobal,
      14. "3": self.keyNumberGlobal,
      15. "4": self.keyNumberGlobal,
      16. "5": self.keyNumberGlobal,
      17. "6": self.keyNumberGlobal,
      18. "7": self.keyNumberGlobal,
      19. "8": self.keyNumberGlobal,
      20. "9": self.keyNumberGlobal,
      21. "0": self.keyNumberGlobal,
      22. "left": self.left,
      23. "right": self.right,
      24. "home": self.home,
      25. "end": self.end,
      26. "deleteForward": self.deleteForward,
      27. "deleteBackward": self.deleteBackward,
      28. "up": self.up,
      29. "down": self.down,
      30. "ok": self.ok,
      31. "cancel": self.cancel
      32. })
      33. def keyNumberGlobal(self, number):
      34. self["minutes"].number(number)
      35. pass
      36. def left(self):
      37. self["minutes"].left()
      38. def right(self):
      39. self["minutes"].right()
      40. def home(self):
      41. self["minutes"].home()
      42. def end(self):
      43. self["minutes"].end()
      44. def deleteForward(self):
      45. self["minutes"].delete()
      46. def deleteBackward(self):
      47. self["minutes"].deleteBackward()
      48. def up(self):
      49. self["minutes"].up()
      50. def down(self):
      51. self["minutes"].down()
      52. def ok(self):
      53. self.close(int(self["minutes"].getText()))
      54. def cancel(self):
      55. self.close(0)
      56. def Plugins(**kwargs):
      57. return [PluginDescriptor(name="AA_MeinPlugin", description=_("macht was ich will"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=main),
      58. PluginDescriptor(name="AA_MeinPlugin", description=_("macht was ich will"), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)]
      59. cmd = "/usr/lib/enigma2/python/Plugins/Extensions/AA_shscript/zap.sh 10 &"
      60. def main(session, **kwargs):
      61. session.open(Console,_("/usr/lib/enigma2/python/Plugins/Extensions/AA_shscript/zap.sh 10 &"),[cmd])
      Alles anzeigen
      Ich möchte auch garnicht, dass mir das jemand fertig macht, sondern nur ein paar entscheidende Tipps ;)
      Python ist anscheinend noch eine Ecke schwieriger als Linux Shell scripts.......
      Aber für heute habe ich erst mal genug... Ich mache hier morgen weiter.

      Danke,
      LG skamm71

      "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."
    • Arbeite wirklich eines der Tutorials durch, damit du weisst, was du machst: LMGTFY erster Treffer.

      Ein paar entscheidende Tipps:
      * Benutze die Klasse MinuteInput bei session.open() in main.
      * Definiere einen Skin für die Klasse MinuteInput mit einem Widget für "minutes".
      * Benutze subprocess.Popen() um deinen Befehl abzusetzen.

      Python ist jetzt nicht wirklich schwierig, sondern für andere Aufgaben gemacht als Shell-Scripten. Das schwierige hier ist, dass Enigma2 schlecht dokumentiert ist, und du eigentlich nur durch lesen von Code und viel ausprobieren und auf die Fresse fallen vorwärts kommst.
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.