Eine .py via Telnet per Hand zum Compilieren anschieben...!?

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

    • Eine .py via Telnet per Hand zum Compilieren anschieben...!?

      Hi,

      hatte dies hier mal in einem anderen Posting mal (nebenbei) gefragt. Dort ging es etwas unter. Deswegen mache ich mal eine Extra-Frage draus...

      chroma_key schrieb:

      ....@all,
      Gibt es denn nicht auch einen Befehl für Telnet, der sagt "Compiliere nun die irgendwas.py neu" !? Dann könnte man das Plugin verlassen, dann Telnet Befehl absetzen, und wieder Plugin starten. Das würde auch schon sehr viel Zeit sparen.


      Hintergrund:
      Einzelne Änderungen in einer .py, werrden ja während eines GUI-Restart neu compiliert. Wenn man das sehr häufig macht (also zB 50 bis 60 mal am Tag, wenn man gerade etwas entwickelt), dann sind das bei mir zusammengerechnet fast 1,5 Stunden "Compilier-Wartezeit", und das ist sicherlich deutlich mehr, als wenn man einzeln compilieren könnte.
      Eine im Netz gefundene Lösung, mit einem "Compilier-Plugin" klappt hier nicht (evtl. weil hier mehrere .py zusammengefasst werden). Daher frage ich nach einem "händischen Befehl" für Telnet. Das kann durchaus auch ein Script sein, das abgearbeitet wird.

      Wo finde ich Informationen über den internen Python-Compiler? Oder hat jemand einen konkreten Tipp für mich?

      Danke im Voraus, LG, chroma_key
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von chroma_key ()

    • wenn die plugin.py zum beispiel im /tmp liegt

      Befehl:

      Quellcode

      1. python


      dann

      Quellcode

      1. import plugin.py


      dann python mit STRG+D beenden.


      edit:

      wenn du es unter Windows machen willst, Python 2.7.x installieren, dann kannst du mit dem befehl .py files kompilieren:
      ins python dir wechseln im cmd

      cd python27

      Quellcode

      1. python -O py_compile.py D:\test\plugin.py


      ich finds unter windows einfacher/schneller, wenn man eben ne 2 zeilen bat datei macht, die man dann nur doppelklicken braucht
      Probleme kann man niemals mit derselben Denkweise lösen.

      ¯\_(ツ)_/¯

      "Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen.
      Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von deepblue2000 ()

    • Oops, war gerade oben noch am editieren... Danke fürs Reply

      Also kleinere Code-Tests mache ich sogar ohne Compile in Telnet:

      - touch /tmp/test.py
      - Lade meine /tmp/test.py via FTP ins Notepad++, editiere, und lade sie via FTP wieder nach /tmp hoch
      - python /tmp/test.py

      Dann führt er mir das direkt aus, und ich kann auf Fehlersuche gehen. Das geht aber nur für kleine Codeschnipsel-Tests, wie: RegEx korrekt? Ein If falsch? TAB vergessen? Wo ist der Fehler??? (gegenenfalls muss eine Standardkomponente dazu noch "importiert" werden).
      Wenn Fehler gefunden, übertrage ich die korrigierte Stelle in die eigentliche .py

      Also bei einer wirklich einzelnen, kleinen, goldigen .py ohne komplexe Verlinkungen ins Image klingt Dein Vorschlag plausibel.
      Aber was mache ich, wenn ich zB. für das MediaPortal - das aus sehr vielen, kleinen .py besteht - ein eizelnes .py editiere!? Da sind so viele Abhängigkeiten. Sinnbildlich ein "import enigma" kann hier nicht verwendet werden. Auch so Framebuffersachen, usw. Naja, eigentlich fast alles *lach*
      Daher die Frage, wie man die Arbeit, die ein GUI-Neustart macht (nur der Compiliervorgang) per Hand anschieben kann.
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher
    • Ehhm, Moment...

      Könnte ich bei Deiner Methode auch in Telnet sagen

      - python
      - import "<Pfad-zum-Plugin-im-Image>/MeineEinzelneGeaenderte.py"
      - Strg+D

      ...und er compiliert das direkt im Image... und dann ...

      - das zuvor beendete Plugin via Fernbedienung wieder aufrufen, und dies wäre Einsparen des GUI-Neustart!? EDIT: Das wäre geradzu prädestiniert für ein kleines Skript. Nee, Strg+D is nix für Skript. Aber macht nix. Die Befehle sind ja im Kommando-Cache... Ein paar mal Cursortaste+ENTER geht ja schnell.

      Falls "Ja", wie müsste dann der import Befehl aussehen? Also die genaue Pfadangabe...
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

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

    • guck dir den post von Kashmir mal im iHAD an

      i-have-a-dreambox.com/wbb2/thread.php?threadid=172074
      Probleme kann man niemals mit derselben Denkweise lösen.

      ¯\_(ツ)_/¯

      "Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen.
      Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
    • @deepblue2000,

      ja, genau diesen Thread hatte ich in dem Zusammenhang gemeint:

      chroma_key schrieb:

      Eine im Netz gefundene Lösung, mit einem "Compilier-Plugin" klappt hier nicht (evtl. weil hier mehrere .py zusammengefasst werden). Daher frage ich nach einem "händischen Befehl" für Telnet. Das kann durchaus auch ein Script sein, das abgearbeitet wird.


      Mir ist schleierhaft, warum das

      a) bei "Multi .py Plugins" nicht funktioniert, und
      b) offenbar keinen sonst stört

      denn ich bin doch bestimmt nicht der Einzige, den die Situation mit dem ständigen GUI-Neustart nervt. Die VU+ Boxen brauchen für einen GUI-Neustart (habe ich mir sagen lassen) nur wenige Sekunden. Die DMM Boxen eher in der Einheit "Minuten". Vielleicht entwickeln ja alle DMM-Programmierer auf VU+ um für DMM zu bauen!? Hmm...
      Also wenn ein GUI-Neustart auf einer DMM nur 5 Sekunden benötigen würde, würde es diesen Thread nicht geben.
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von chroma_key ()

    • ok,

      ich wüsste sonst auch keine andere lösung, da ich mit python sogut wie nichts am hut habe,
      nur ab und an mal bischen rumspielen.

      aber das mit den eeeeeeeeeeeeeeeeeewiiiiiigeen gui restarts kenn ich von den skins, wenn man da was
      ändert und ergebnis testen will, gehen 90% der zeit auf die gui-restarts ;)
      Probleme kann man niemals mit derselben Denkweise lösen.

      ¯\_(ツ)_/¯

      "Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen.
      Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."
    • Ok,

      nun hab ich sogar einen Tipp an Dich... Skins entwickeln ist fast eines der einzigen Dinge, die kein GUI-Neustart benötigen... Also Änderungen an einer .xml für einen Skin, sind unmittelbar wirksam.
      Du kannst also die betreffende Stelle verlassen, und nach Änderung der .xml direkt wieder aufrufen, und die Änderungen auch ohne GUI-Restart bestaunen. Also zB. das Feld mit der Uhrzeit 2 Pixel weiter rechts, oder der Button nun mit rotem Rand, usw.

      Höchstens Änderungen in einer Source, die bestimmte Parameter in der .xml zum Skin ändert, erfordern einen GUI-Neustart; also zB. wenn ein Parameter-Name sich geändert hat, oder einer hinzukam, oder herausgenommen wurde.

      EDIT: "Herausgenommenes Parameter" in den Sourcen erfordert übrigens auch keinen Neustart. Wenn das Parameter in der .xml zum Skin ebenfalls nicht (mehr) aufgerufen wird, gibt es sowieso keine Probleme. Also egal ob GUI-Neustart durchgeführt wurde, oder nicht.
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

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

    • chroma_key schrieb:


      nun hab ich sogar einen Tipp an Dich... Skins entwickeln ist fast eines der einzigen Dinge, die kein GUI-Neustart benötigen... Also Änderungen an einer .xml für einen Skin, sind unmittelbar wirksam.



      Seit wann? Ich skinne auch hin und wieder, aber das wäre mir noch nicht aufgefallen. Allerdings editiere ich die skin.xml mit vi direkt auf der Box, oder mit notepad++, PSPad etc. über FTP. Egal was ich da ändere, es erfordert immer einen GUI Neustart ....

      Wie editierst du die skin.xml?
    • Zum Zwischen-Thema "Skins ohne Reboot":
      Freunde, da muss ich mich entschuldigen... Ihr redet vom Erscheinungsbild von Enigma2. Dort sind ja die gesamten XML-Daten in einer einzigen, großen skin.xml enthalten. Die skin.xml bleibt während der Session immer aktiv, und Änderungen erfordern Neustart,

      Ich sprach vom Erscheinungsbild von Plugins. Auch hier wird die xml während Laufzeit des Plugins geblockt, aber hier reicht Plugin Schließen/Öffnen, statt Reboot, da eine neue Session gestartet wird. Bei Unterseiten/menüs in separaten XMLs reicht sogar ein Zurückblättern und wieder Vorblättern, um Änderungen sehen zu können, sofern das Plugin modular aufgebaut ist. Nur Änderungen am Hauptmenü (XML) des Plugins erfordern ein Schließen/Öffnen. Würde man Enigma2 modular umbauen (also dass nicht alles auf einmal in einer Session läuft), und die Module würden sich mehrerer XMLs bedienen, dann könnte man das vermutlich auch so genießen.

      Huhu Kami,
      long time no see... :)
      Ja, mein altes Editier-Leiden *g* Ich glaube skars hatte mal den Rekord mit 34 Edits in einem normalen Antwortposting, hehe.
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

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

    • Ich hatte schon vor längerer Zeit mal mit einem Project angefangen, aber habe kaum noch Zeit dazu und ist wieder "eingeschlafen"

      Ich passe nur noch hin- und wieder einen @kerni skin an, den ich verwende. Leider entwickelt @kerni ja nichts mehr weiter. Und da Mod's hier unerwünscht sind, gibt's da auch nichts offizielles ...
    • @Fred

      So lange du keine Änderungen an den Skin-Screens machst und deine Anpassungen in eine Skin_user auslagerst kannst du die Sachen wenn Kerni sein OK gibt sicher der Allgemeinheit bereitstellen.
      Aber da schließt du dich am besten mal mit oZxS kurz :winke:

      Gruß Zeff
    • dhwz schrieb:

      Die Python Files kann man nur durch einen Neustart von E2 compilieren, ansonsten fehlt einem jegliche Debug Möglichkeit.
      Und die Idee von kashmir ist leider nicht praktikabel anwendbar schon gar nicht beim MediaPortal. :D


      Ok, aber wenn einem bloß die Debug-Möglichkeit fehlt, könnte es in mancher Situation dennoch helfen. ZB. wenn man nicht einem Fehler auf der Spur ist, sondern mehrfach einen Zwischenstand seiner eigenen Sourcen umgesetzt sehen will. Der Zwischenstand kann durchaus auch fehlerfrei sein. Oft entdeckt man einen etwaigen Fehler in dieser Phase auch selbst, und man kann ja in den verdächtigen def's und class`s auch Dateien mit Infos nach /tmp schreiben lassen, um auf eigene Weise einem Fehler auf die Spur zu kommen.

      Wenn man dann trotzdem noch einen (nicht auffindbaren, eigenen) Fehler drin hat, besteht ja stets noch die Möglichkeit, für einen Debug die GUI neu zu starten.

      Wie ginge es denn ohne Debug-Möglichkeit?
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von chroma_key ()

    • Natürlich geht das und das hat auch nichts mit Enigma oder einem speziellen Plugin, sondern nur mit Python zu tun. Für diesen Zweck gibt es das Python reload modul:

      reload(module)

      Reload a previously imported module. The argument must be a module object, so it must have been successfully imported before. This is useful if you have edited the module source file using an external editor and want to try out the new version without leaving the Python interpreter. The return value is the module object (the same as the module argument).

      When reload(module) is executed:

      Python modules’ code is recompiled and the module-level code reexecuted, defining a new set of objects which are bound to names in the module’s dictionary.
      docs.python.org

      Du kannst z.b. die original plugin.py in plugin_org.py umbenennen und eine neue plugin.py erstellen, in der du die plugin_org zuerst importierst und dann den reload machst:
      import plugin_org
      reload(plugin_org)

      Damit kannst du Änderungen an der plugin_org.py machen, ohne Enigma neu starten zu müssen.

      Wenn in der plugin_org weitere .py Module geladen werden, die du ändern willst, machst du für diese in der plugin_org ebenfalls einen reload, nachdem die Module dort importiert wurden. So kannst du alle .py Module ändern ohne Enigma neu starten zu müssen.
    • Hallo kashmir, super Antwort, vielen Dank!
      Sorry für das Delay... ich hatte einige Tage rum-probiert, und zwischendurch immer mal pausiert... Entweder mache ich was falsch, oder das geht tatsächlich nicht ganz so einfach...

      Also als Beispiel habe ich mal das "GraphMultiEpg.py" genommen, das wir ja alle haben dürften. Folgendes habe ich gemacht:

      - GraphMultiEpg.py umbenannt in GraphMultiEpg_org.py
      - Eine neue, leere Datei angelegt, namens "GraphMultiEpg.py"
      - In diese neue Datei habe ich nur zwei Zeilen reingeschrieben...(es gibt keine weiteren Zeilen darin, außer diese zwei):

      Quellcode

      1. import GraphMultiEpg_org
      2. reload(GraphMultiEpg_org)
      - In der (nun jetzt GraphMultiEpg_org.py heissenden, eigentlichen Source) habe ich eine winzige Änderung vorgenommen... Nämlich eine Schriftgröße von 20 auf 10 gesetzt.
      - nun GUI-Restart, damit er die neue, aus bloss 2 Zeilen bestehende GraphMultiEpg.py wenigstens mal compiliert.

      Letzteres macht er sogar. Es entsteht eine 222 Bytes große GraphMultiEpg.pyo. Ich dachte, nun könne ich immer kleine Änderungen in der GraphMultiEpg_org.py vornehmen, und nach verlassen/neustarten jener, würde ich die Änderungen auch ohne GUI-Neustart sehen können.
      Doch er führt das Plugin mit folgender Fehlermeldung nicht mehr aus "Extensions/GraphMultiEPG (cannot import name GraphMultiEPG)"

      Dies (erkennbar an dem grossgeschriebenem "EPG") ist die gleichnamige Class innerhalb der, nun jetzt GraphMultiEpg_org,py heissenden Source.
      Ok, nachvollziehbar... aber wie gehts nun weiter? Ich hoffe, ich habe nur ein Detail übersehen... Ich habe die Vorahnung, dass man jede Class importen muss EDIT: Das hat auch nix gebracht. Wenn noch mehr importet werden muss, bräuchte ich mal Hilfe...

      Wäre supercool, wenn Du Deinen Workflow-Vorschlag mal auf Deiner eigenen Box, mit genau diesem Plugin (GraphMultiEpg) durchspielen würdest, und dann etwas detaillierter beschreibst, was Du alles hierfür tun musstest.

      Riesen Dank im Voraus und Beste Grüße,

      chroma_key
      "Wenn das die Lösung ist, will ich mein Problem wieder zurück"
      Gesendet mit Fernsprecher

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von chroma_key ()