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 # Diese und folgende Zeile für Farbänderung
import readchar # muss extra installiert werden mit: pip install readchar
 
 
thread_Pause = False
thread_kill = False
 
def AbbruchFarbeZuweisung (farbe1, farbe2): # Übergabe der eingegebenen Farben (für globale Variable)
    global abbruchHinFarbe
    global abbruchVorFarbe
    abbruchHinFarbe = farbe1
    abbruchVorFarbe = farbe2
 
def Abbruch(signum, frame):
    global thread_Pause
    global thread_kill
    #print(Style.RESET_ALL)
    thread_Pause = True
    time.sleep(0.2)
    # _ = system("cls") # nur Bildschirm clearen, wenn der Bug zu häufig auftritt
    text = "\nSTRG-C wurde gedrückt. Willst du wirklich abbrechen? Drücke j/n (für Ja/Nein)." #Gib j/n (für Ja/Nein) ein. -> wenn ohne readchar
    print(Back.BLACK + Fore.RED + text, flush=True)
    #antwort = input().lower()
    antwort = readchar.readkey().lower()
    if antwort == 'j':
        thread_kill = True # extra Thread sollte vor Programmende gekillt werden, da sonst die Anaconda verbuggt ist (manchmal)
        time.sleep(0.1)
        print("")
        if os.path.exists('Bildercache'): # Fehlerabfang, falls der Ordner noch nicht erstellt wurde
            shutil.rmtree('Bildercache') # Löscht kompletten Ordner (ganz am Ende soll das hin)
        print(Style.RESET_ALL)
        exit(1)
    else:
        thread_Pause = False
        try: # Fehlerabfang, falls am Anfang STRG+C gedrückt wird
            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 (evtl. kann hier auch weg oder noch an andere Stellen des Programms hinzufügen)
        print(" " * len(text), end="", flush=True) # Löscht gedruckte Zeile
        print("    ", end="\r", flush=True)
 
def Abbruchsignal():
    signal.signal(signal.SIGINT, Abbruch)
ws2122/asciia/abbruch.py/start.1647438554.txt.gz · Zuletzt geändert: 2022/03/16 14:49 von MoscarTU