• Für mein Restic UI benutze ich sehr intensiv

    subprocess.run
    

    Nun, da ich alles so weit funktionell habe, wollte ich mich ans Feintuning machen. So Sachen wie Exception Handling usw. lasse ich immer links liegen. Aber das muss natürlich rein, also wollte ich die Fehlermeldungen abfangen. So weit, so gut, leider war das gar nicht so einfach. So sieht das aus, wenn ich mit Restic einen Init machen möchte.

    result = subprocess.run(['restic','-r',backup_data[row].repository,'init'], input = backup_data[row].password, stdout=subprocess.PIPE,  universal_newlines=True]
    

    Mein erster Ansatz war jetzt folgendes.

    result = subprocess.run(['restic','-r',backup_data[row].repository,'init'], input = backup_data[row].password, stdout=subprocess.PIPE, stderr=subprocess.PIPE,  universal_newlines=True]
    

    Also einfach stderr so abfangen, wie ich das auch mit dem Output schon gemacht hatte. Ergebnis, egal was ich machte, da kam nix 🤔

    Nach Lösungen im Internet gesucht und dann irgendwann mal über das hier gestolpert.

    result = subprocess.run(['restic','-r',backup_data[row].repository,'init'], input = backup_data[row].password, capture_output=True, text=True)
    result.check_returncode()
    

    Die Funktion

    result.check_returncode()
    

    brachte mich in die Lage, die Ausgaben abzufangen und auszugeben.

    Beispiel der Ausgabe der Fehlermeldungen.

    msg_box_error(self, result.stderr)
    

    Der Output wird so ausgegeben

    print(result.stdout)
    

    Es gibt auch noch folgendes

     print("Return-Code: ", result.returncode)
    

    Gibt den Returncode aus. Beispiel

    Return-Code:  1
    

    Außerdem habe ich gelernt, das es sinnvoller ist den ganzen Code anders zu strukturieren.

    try:
        # Hier checken wir die Daten.
        pass
    except:
        # Exception Handling
        pass
    else:
         # Normaler Vorgang, wenn kein Fehler
        pass
    finally:
        # Code der zum Schluß noch ausgeführt wird. 
        pass
    

    Jetzt muss ich das noch in viele andere Funktionen einbauen und testen usw.