Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws2122:asciia:abbruch.py:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
ws2122:asciia:abbruch.py:start [2022/03/16 14:30]
MoscarTU angelegt
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.1647437451.txt.gz · Zuletzt geändert: 2022/03/16 14:30 von MoscarTU