Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2122:asciia:abbruch.py:start

Dies ist eine alte Version des Dokuments!


Abbruch.py:

Diese Datei beinhaltet Funktionen, die das Programm korrekt beenden, falls STRG+C gedrückt wurde. Dabei war es uns wichtig, dass die Bilder, welche temporär gespeichert werden, zu löschen, damit diese nicht die Festplatte vollmüllen.

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

Diese Bibliotheken werden für Abbruch.py extra importiert.

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

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.

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)

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.

def Abbruchsignal():
    signal.signal(signal.SIGINT, Abbruch)

Die Funktion fängt STRG+C ab.

ws2122/asciia/abbruch.py/start.1647596359.txt.gz · Zuletzt geändert: 2022/03/18 10:39 von MoscarTU