Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws2122:asciia:abbruch.py:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws2122:asciia:abbruch.py:start [2022/03/16 14:31]
MoscarTU
ws2122:asciia:abbruch.py:start [2022/03/26 16:25] (aktuell)
MoscarTU
Zeile 1: Zeile 1:
 ===== Abbruch.py: ===== ===== Abbruch.py: =====
 +Diese Datei beinhaltet Funktionen, die das Programm korrekt beenden, falls STRG + C gedrückt wurde. Dabei war es uns wichtig, dass die temporär gespeicherten Bilder gelöscht werden, damit diese keinen Platz auf der Festplatte mehr verbrauchen.
 +<code python>
 +import shutil
 +import os
 +import signal
 +import colorama
 +import time
 +from colorama import Fore, Back, Style
 +import readchar # muss extra installiert werden mit: pip install readchar
 +import AsciiBildConverter as abc
 +
 +</​code>​
 +Diese Bibliotheken werden für Abbruch.py extra importiert.
 +<code python>
 +
 +thread_Pause = False
 +thread_kill = False
 +
 +# Übergabe der eingegebenen Farben (für globale Variable)
 +def AbbruchFarbeZuweisung (farbe1, farbe2): ​
 +    global abbruchHinFarbe
 +    global abbruchVorFarbe
 +    abbruchHinFarbe = farbe1
 +    abbruchVorFarbe = farbe2
 +
 +</​code>​
 +Die Funktion "​AbbruchFarbeZuweisung"​ speichert nur die Farben (für Zeichen und Hintergrund) global ab, damit in der Funktion Abbruch auf die Farbeingabe von der Hauptdatei ASCII-Animation zugegriffen werden kann.
 +<code python>
 +
 +def Abbruch(signum,​ frame):
 +    global thread_Pause
 +    global thread_kill
 +    thread_Pause = True
 +    time.sleep(0.2)
 +    text = "​\nSTRG-C wurde gedrückt. Willst du wirklich abbrechen? Drücke j/n (für Ja/​Nein)."​
 +    print(Back.BLACK + Fore.RED + text, flush=True)
 +    time.sleep(0.2)
 +    antwort = readchar.readkey().lower()
 +    if antwort == '​j':​
 +        thread_kill = True
 +        abc.BildFreigeben()
 +        time.sleep(0.1)
 +        print(""​)
 +        # Fehlerabfang,​ falls der Ordner noch nicht erstellt wurde
 +        if os.path.exists('​Bildercache'​):​
 +            shutil.rmtree('​Bildercache'​) # Löscht kompletten Ordner
 +
 +        print(Style.RESET_ALL)
 +        exit(1)
 +    else:
 +        thread_Pause = False
 +        # Fehlerabfang,​ falls am Anfang (vor Farbauswahl) STRG+C gedrückt wird
 +        try:
 +            print(getattr(Fore,​ abbruchHinFarbe) + getattr(Back,​ abbruchVorFarbe),​ end="​\r"​) # für Hintergrundfarbe und Zeichenfarbe,​ print(Style.RESET_ALL) für Reset
 +        except Exception:
 +            print(Style.RESET_ALL)
 +
 +        print("",​ end="​\r",​ flush=True) # Flush fixt ein Problem mit sleep
 +        print("​ " * len(text), end="",​ flush=True) # Löscht gedruckte Zeile
 +        print(" ​   ", end="​\r",​ flush=True)
 +
 +</​code>​
 +Die Methode "​Abbruch"​ ist der Hauptbestandteil der Datei. Am Anfang werden die Variablen thread_Pause und thread_kill global und thread_Pause zu True. Dadurch wird der Thread pausiert, also es werden keine weiteren Bilder aus dem Video erstmal gespeichert (siehe ASCII-Animation-Datei).
 +Durch eine Nachricht wird der Benutzer aufgefordert "​j"​ oder "​n"​ zu drücken, die Farbe der Nachricht durfte nicht unbedingt so wie die Farbauswahl sein, da sie evtl. nicht sichtbar wäre. ​
 +Bei "​j"​ wird der Thread gekillt und danach kommt eine wichtige sleep-Pause. Abschließend wird der Bildercache gelöscht.
 +Falls nicht abgebrochen werden soll, wird wieder die Farbe (für die Zeichen und den Hintergrund) wiederhergestellt. Dabei müssen die Variablen mit "​getattr"​ von char/String in ein Attribut umgewandelt werden.
 +<code python>
 +
 +def Abbruchsignal():​
 +    signal.signal(signal.SIGINT,​ Abbruch)
 +</​code>​
 +
 +Die Funktion fängt STRG+C ab.
ws2122/asciia/abbruch.py/start.1647437473.txt.gz · Zuletzt geändert: 2022/03/16 14:31 von MoscarTU