Datei neu einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Hallo liebes Forum,
Ich bin grad dabei Python zu lernen, nun habe ich aber Probleme, bei einer Datei, die sich immer verändert.
An mein Raspberry pi hab ich ein Thermometer angeschlossen, was mithilfe eines Python Script regelmäßig Daten in eine Datei schreibt.
Das ganze möchte ich mir mit einen Plugin am Enigma2 Receiver ausgeben lassen, soweit habe ich das auch hinbekommen, nur es aktualisiert sich nicht.
Ich bräuchte mal eure Hilfe, wie man aller x Sekunden oder Minuten die Datei neu einliest und am Bildschirm übers Plugin ausgibt.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Code: Alles auswählen

from Screens.Screen import Screen
from Components.Label import Label
from Components.ActionMap import ActionMap
from Plugins.Plugin import PluginDescriptor
import time
########################################################################

f = open( "/usr/text")
a = f.read()
f.close()

class HalloWorldScreen(Screen):
	skin = """
		<screen position="130,150" size="460,150" title="Ihad.tv e2-tutorial lesson 1" >
			<widget name="myLabel" position="10,60" size="200,40" font="Regular;20"/>
		</screen>"""
	def __init__(self, session, args = None):
		self.session = session

		Screen.__init__(self, session)
		self["myLabel"] = Label(_(a))
		self["myActionMap"] = ActionMap(["SetupActions"],
		{
			"cancel": self.close # add the RC Command "cancel" to close your Screen
		}, -1)


###########################################################################

def main(session, **kwargs):
	print "\n[Hallo World] start\n"
	
	session.open(HalloWorldScreen)

###########################################################################

def Plugins(**kwargs):
	return PluginDescriptor(
			name="HelloWorld",
			description="lesson 1 - Ihad.tv e2-tutorial",
			where = PluginDescriptor.WHERE_PLUGINMENU,
			icon="../ihad_tut.png",
			fnc=main)
Zuletzt geändert von Anonymous am Dienstag 2. Mai 2017, 11:08, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@egon11: Es kommt darauf an, was Dein Programm sonst noch tun soll, und ob es sequentielll programmiert ist, oder ereignisgesteuert.

Wenn Du eine Zeitschleife machts, dann macht das Programm sonst nichts als Warten und Einlesen, wenn es danach auch ausgibt und wenn das reicht, naja, warum nicht.

Aber wenn Du ein Programm hast, das allerhand macht und nebenbei die Daten so eingelesen werden, dann mache das in einem Thread. Wenn im Hauptprogramm nichts aufgerufen zu werden braucht, wenn die Daten sich geändert haben, dann ist das auch kein Problem.

Du müßtest schon etwas genauer beschreiben, wie der Ablauf sein soll. Etwa, ob es auch auf Benutzereingaben reagieren soll, oder einfach nur mißt und ausgibt ohne Benutzerinteraktionen.

Genügt so etwas?

Code: Alles auswählen

import time

WARTE_SEKUNDEN = 4

def einlesen():
    print("lese ein")

def ausgeben():
    print("gebe aus")


def main():
    while True:
        einlesen()
        ausgeben()
        time.sleep(WARTE_SEKUNDEN)

main()
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Das Programm (Plugin) soll nur die Daten am Fernseher ausgeben und aller paar Minuten neu eingelesen werden.
Sonst nix weiter. In meinen 2. Post habe ich ja ein funktionierendes Plugin, aber es aktualisiert nichts, so dass immer der erste Wert, nachdem ich dieses Plugin aufrufe, stehen bleibt, während die Datei aber eine ganz andere Zahl/Buchstabe hat.
(der Raspberry schreibt jede Minute die aktuelle Zeit in die Datei und überschreibt die alte).
BlackJack

@egon11: Da müsstest Du in der Plugin-API schauen ob man da irgendwie zeitbasiert Rückrufe registrieren kann und dann bei so einem Rückruf die Datei auslesen und die Anzeige aktualisieren.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

OK ich werde mal schauen, aber das klingt für mich alles wie böhmische Dörfer.
Ich dachte ich kann das mit einer while Schleife regeln, aber das geht auch nicht.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@egon11: ich habe es gefunden: from enigma import eTimer

siehe dazu: https://i-have-a-dreambox.com/wbb2/thre ... id=2097046
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

@ Alfons Mittelmeye
Danke, genau das habe ich gesucht.
Antworten