Willkommen! Melden Sie sich an oder registrieren Sie sich.

Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.

Anmelden - oder - Benutzerkonto erstellen

Mit Python Dateiinhalt ausgeben, darstellen

  • Moin, ich brauche mal eure Hilfe.
    Ich möchte eine Log Datei auslesen und natürlich auf einem Screen darstellen.
    Kleines Phyton Programm Startet/Stop einen Dienst, das Protokoll dazu wird in /etc abgelegt.
    ich möcht kein fertiges Programm, sonder nur eine Hilfe wie ich das angehen muss.
    Danke!

  • Code
    1. self['mylabel'] = ScrollLabel()
    2. if fileExists("/pfad/datei"):
    3. fp = file("/pfad/datei", "r")
    4. content =fp.read()
    5. fp.close()
    6. Self['mylabel'].setText(content)


    Imports musst du noch machen und natürlich den screen definieren

  • kommt darauf an, wie aufwändig du das machen willst - eingentlich brauchst du nur mit system den Befehl cat /etc/name.log über die eConsole ausgeben, das ist ein 7 Zeiler


    Ich hätte hier auch etwas aufwändigers inkl. skinbarer eConsole (thx Dr.Best -> eConsole: Screen Größe ändern ), das genau für den Zweck passen würde, das müsstest du nur an ein paar Stellen anpassen und den os Teil in python proggen (1 Zeile)


    sag' halt Bescheid, wäre nur copy&paste

  • Ich will eigendlich noch nicht genau beschreiben was ich vorhabe (ketschuss wird es Ahnen). Einmal möchte ich diese Datei auf einem Screen darstellen (kontrolle was ist passiert) zu zweiten möchte, muss ich die Datei auswerten nach einer bestimmten Zahlen/Buchstaben-folge.
    Zweks läuft das Programm / ist es gestoppt, dem entsprechen ein Picon Rot/Grün darstellen.


    PS.: Das Programm läuft, Grünes Picon ist sichtbar,
    Programm läuft nicht Rotes Picon,
    Das habe ich schon, was noch fehlt ist ein Autostart, da habe ich Ansätze gefunden.
    Und wie gesagt ich bin blutiger Python Anfänger.

  • Soo, ich kann jetzt den das text.log im Skin ausgeben, hätte da aber noch ein kleines (für euch) Problem.
    Die Länge dee log's verändert sich, zwischen ungefähr 50-60 Zeilen. Die Ersten 30 Zeilen steht nur blabla, folge dessen möchte ich das log erst ab der 30zigsten Zeile darstellen.
    Meine bisherigen Versuche endeten mit einem GS.:kater:


    Jemand ne Idee wie ich das angehen kann, muss?


    Irgendwie:
    for Zeile
    if Zeile = 30:
    jetzt in String


    oder so?(

  • Moin, erst einmal danke an Shaderman für den denkanstoß.
    ich musste die Zeile ein wenig anpassen damit es funktioniert.


    Nun habe ich das Problem, das:

    Code
    1. readlines[29:]

    zum GS führt.


    Bei:

    Code
    1. readlines[29]

    sehe ich nur eine Zeile, was ja auch sinn macht.


    Hier ist der Abschnitt wo ich diese Datei anzeigen lassen will:

    Code
    1. def info(self):
    2. if fileExists("/etc/1openvpn.log"):
    3. ovpn = file("/etc/1openvpn.log")
    4. Inhalt = ovpn.readlines()[29:]
    5. ovpn.close()
    6. self['Vpn'].setText(Inhalt)


    Ich hänge mal das Crash.log mit an.
    Vielleicht kann mir ja jemand helfen.

  • Sorry, readlines() gibt ja eine liste zurück, keinen String. Mit ''.join(Inhalt) kannst Du aus der Liste einen String machen. Das sollte funktionieren:


    Code
    1. def info(self):
    2. if fileExists("/etc/1openvpn.log"):
    3. ovpn = file("/etc/1openvpn.log")
    4. Inhalt = ovpn.readlines()[29:]
    5. ovpn.close()
    6. self['Vpn'].setText(''.join(Inhalt))
  • Shaderman , du brauchts dich weiß Gott nicht zu entschuldigen!
    Ich habe ein dickes Danke zu sagen: LÄUFT :lol::anbet::blinz::ok::topok: SUPER!!!


    Google gibt dazu auch nicht viel her. Eigentlich nichts brauchbares.

  • Ohne einen Glaubenskrieg loszulegen... Hier ein kleiner Vorschlag zu dem obigen Code-Snippet :)



    'with open' sorgt automatisch dafür, dass f.close() aufgerufen wird und auch sonst alles "korrekt" abgeschlossen wird. Spart auch ein paar Zeilen Code :)


    Ggf. sollte oben auch gecheckt werden, ob auch genug Zeilen im Log-File vorhanden sind (in diesem Fall mindestens 30) um einen Absturz des Plugins zu vermeiden.

  • Danke für den hinweiß @mmtux, was mich mehr interresieren wüde ist, was muss ich tuen das:

    Code
    1. name="Vpn" scrollbarMode="showOnDemand"

    funktioniert.

  • Ja:

    Code
    1. self['Vpn'] = ScrollLabel()


    und:

    Code
    1. def info(self):
    2. if fileExists("/etc/openvpn.log"):
    3. ovpn = file("/etc/openvpn.log")
    4. Inhalt = ovpn.readlines()[27:]
    5. ovpn.close()
    6. self['Vpn'].setText(''.join(Inhalt))
    7. else:
    8. self.prombt("systemctl status openvpn.service")
  • Eigentlich könnte man doch Scrollbarmode standardgemäß einschalten im Image. Muß man in jedem Screen programmieren.
    Oder hat das einen Grund, warum es aus ist.

  • lies die letzten Posts hier nochmal!!!


    Mir ist klar, dass das alleine rein garnix bewirkt.
    Evtl. dämmert es Dir dann auch :D

    Boxen: DM7080HD, DM820HD, DM8000, DM900ultraHD

    In 50% sitzt das Problem vor dem Gerät und bei den anderen 50% hab ich mich geirrt, dass es nicht davor sitzt :cocksy:

  • Das ist halt nix, wenn man bei der Arbeit mit dem Handy gschwind was überfliegt. Bin weiter oben über das


    Danke für den hinweiß @mmtux, was mich mehr interresieren wüde ist, was muss ich tuen das:

    Code
    1. name="Vpn" scrollbarMode="showOnDemand"

    funktioniert.


    gestolpert. Deswegen ist mir das so eingefallen.

  • Moin, mal wieder weiß ich nicht weiter:think:



    Erklärung:
    Ich will feststellen wieviele Zeilen die Datei hat und bei Schlüsselwort1 bzw. 2 die bis dahin gezählten 'line' in 'zeile' schreiben, danach soll in 'Variable' ab 'zeile' bis 'zeile+1' in 'Inhalt'geschrieben werden.
    Funktioniert alles soweit, nur beim Aufruf des Plugin's bekomme ich die Fehlermeldung:
    "Zeile XXX TypeError: cannot concatenate 'str' and 'int' objects"


    Kann mir wer helfen, Google versagt auf ganzer Linie?(
    Ändere ich "Inhalt = ovpn.readlines()[zeile:zeile + 1]" in "Inhalt = ovpn.readlines()[30:31]" läuft es.

  • es gibt einige Fehler:
    - du nutzt eine Datei und nennst diese text, verwendest opvn, welches aber kein Inhalt haben kann, das readlines fehlt
    - line ist der INHALT der Zeile und nicht die Zeilennummer, auch ein zeile = line ändert daran nichts, zeile hat dann auch den Zeileninhalt
    - Texte (zeile), also Zeileninhalt kann man nicht als Index angeben, nur Integer
    Beispiel


    ob überhaupt ein Schlüsselwort gefunden wird, das sollte aber auch noch geprüft/abgefangen werden!!!!!!