Stop Programm über Thonny Python , abfangen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Hallo,

Ich verwende den Thonny Editor und möchte bei run / stop , jeweils eine Programmeldung dazu abfangen.
Also wenn ich Programm stoppe, soll noch eine Meldung, Befehlabfolge ablaufen. Mit try except bin ich leider nicht weiter gekommen, kann mir als Python Anfänger ein Tipp geben?

Mein Code

Import sys

Try:
While Try:
Print(„program läuft“)

Except:
If quit():
Print(„gestoppt“)
Finally:
Print(„ Programm wurde gestoppt“)


Vielen Dank und Grüße
Steffen
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Groß-Kleinsschreibung ist in Python relevant, Schlüsselworte werden alle klein geschrieben. Dein Code ist also unverständlich und es ist schwierig zu helfen, weil wir nicht wissen, was jetzt Schreibfehler und was Programmierfehler. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal zwei und mal drei.
`sys` wird importiert, aber nicht benutzt. `try` ist ein Schlüsselwort, und kann nicht als Ausdruck in `while` stehen. Nakte excepts darf man nicht benutzen, weil man dann nicht sehen kann, welcher Fehler denn im try-Block aufgetreten ist.
Wenn im except-Block etwas auftritt, was wieder eine Exception auslöst (wie bei Deinem Code), dann wird der finally-Block nicht mehr aufgerufen.

Code: Alles auswählen

try:
    while True:
        print("program läuft")
finally:
    print("Programm wurde gestoppt")
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Was soll denn quit() eigentlich sein? Wenn es sich dabei um das vordefinierte quit aus dem site-Modul handelt, dann würde ich dazu gerne die Dokumentation von quit (und exit) zitieren: "They are useful for the interactive interpreter shell and should not be used in programs."
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Hi, erstmal vielen Dank für eine Antwort.
Also ich habe über den Python Editor Thonny ein Programm laufen, wo ich meine Sieben Segmentanzeige über Raspery Pi ansteuerere.
Wenn ich im Editor auf Stop Button gehe, möchte ich das dann nochmal eine gesteuerte Aktion im Programm abläuft (Setze LED Anzeig zurück).

Bisher habe ich noch keinen Weg gefunden, wie ich im programm darauf reagieren kann, ich dachte die Try except methode sollte das abfangen, geht aber nicht.
Der mir am ähnlichste Befehl zu dem "manuell ausgelösten Stop" wäre quit() oder sys.exit, ist aber leider nicht der fall.
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

wenn ich wüsste wie ich ein Foto anhängen könnte, dann hätte ich mal ein screenshot von meinem Editor gemacht..
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Thonny beim Drücken auf "Stop" den finally-Block nicht ausführt, dann hast Du keine Chance, noch darauf zu reagieren. Das zeigt mal wieder, dass manche IDEs nicht zum Ausführen von Prograammen nicht geeignet sind. Starte also das Programm nicht mit Thonny, oder benutze zumindest den Stop-Button nicht.
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Ok, das heißt ich mache das über Shell Befehle besser
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Oder du baust eine Option ein, das Programm zu beenden.
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Problem ist, dass der Stop-Button in der IDE den Prozess tatsächlich killt (in thonny/running.py):

Code: Alles auswählen

    def _close_backend(self):
        if self._proc is not None and self._proc.poll() is None:
            logger.info("Killing backend process")
            self._proc.kill()

        self._proc = None
        self._response_queue = None
Das heisst da wird nicht wie bei `terminate()` der Prozess gebeten sich zu beenden, wo er noch drauf reagieren könnte, sondern es wird dem Betriebssystem gesagt es soll den Prozess beenden.

Lösung innerhalb von Thonny wäre nicht Stop, sondern Strg+C beziehungsweise im Menü „Run → Interrupt execution“ zu verwenden. Da kann das Programm noch drauf reagieren und ``finally``-Blöcke werden noch ausgeführt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten