@jandie1505: zu Deinem Code: `global` auf oberster Ebene hat exakt null Effekt. `global` sollte in einem ordentlichen Programm sowieso nicht vorkommen.
Dann sollten auf oberster Ebene nur Konstanten und (Funktions-)Definitionen stehen.
waittime ist eine Konstante und wird per Konvention KOMPLETT_GROSS geschrieben. Programme, die einen zwingen, ohne Grund zu warten, finde ich aber sowieso zum K****.
Alle weiteren Zuweisungen werden weiter unten aber wieder überschrieben, können also weg.
Alles was eine Funktion braucht, bekommt sie über ihre Parameter, ›updatefile‹ z.B. ›textfileaddress‹ warum dessen Wert aber an › configFilePath‹ gebunden wird, ist mir unklar. Handelt es sich hier nun um eine Adresse oder um einen Pfad?
›currentversion‹ kommt auch aus dem Nichts. Am Anfang weist Du dieser Variable eine Fließkommazahl zu, dann aber einen String, den Du mit < vergleichst. Das funktioniert bei üblichen Versionssstrings nicht. Wenn die Versionsnummer durch per . getrennte Zahlen besteht, splittet man den String üblicherweise beim Punkt, wandelt die Teile per int in Zahlen um und vergleicht das daraus erzeugte Tuple.
Ein ›return‹ am Ende einer Funktion ist überflüssig und kann weg.
Die while-Schleife mit `skip` ist eigentlich eine for-Schleife über Countdown, den man vereinfacht auch als Count-Up implementieren könnte. Wie kommst Du drauf, dass das zählen bis 250000 3 Sekunden dauert? Wenn Du 3 Sekunden warten willst, dann tu exakt dies. Jetzt wollte ich gerade schreiben, dass dieses keyboard-Modul da sicher schon was hat, hat es aber nicht, da die blöde wait-Methode kein timeout kennt.
Code: Alles auswählen
from threading import Event
def wait(hotkey, suppress=False, trigger_on_release=False, time_out=None):
"""
Blocks the program execution until the given hotkey is pressed or,
time is out.
Returns True on keypress and False on timeout.
"""
lock = Event()
handler = add_hotkey(hotkey, lambda: lock.set(), suppress=suppress, trigger_on_release=trigger_on_release)
result = lock.wait(timeout)
remove_hotkey(handler)
return result
sys.exit sollte in einem ordentlichen Programm nicht vorkommen, dazu gibt es die main-Funktion, die man einfach per `return` verlassen könnte.
›execfile‹ benutzt man üblicherweise nicht. Warum ist eUrecovery nicht einfach ein Modul, das eine recovery-Funktion hat, die Du einfach aufrufen könntest?
eUrecovery hat die selben Probleme wie easyupdater, und enthält den selben Code zum Lesen der Konfigurationsdatei. Das könnte man also zusammenfassen.
Dann behauptest Du in Deinen Beispieldateien, dass Du yaml benutzt, ist aber falsch, sind normale cfg-Dateien.