Tkinter python subprocess

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
Yokozuna
User
Beiträge: 20
Registriert: Mittwoch 14. September 2022, 07:24

Hallo,

Ich habe seit kurzem mit Tkinter angefangen und habe verschiedene Buttons z.b Start - Stop. Der Start button startet ein anderes python script das funktioniert. Nun frage ich mich wie ich dieses Python script wieder stoppen kann. Unten ist mein Code wäre Super wenn ihr helfen könntet


def start():
process = subprocess.Popen([sys.executable, "version1.py"])
process.communicate()
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Yokozuna: Du könntest das kooperativ programmieren, also das das andere Programm auf eine bestimmte Eingabe wartet. Ansonsten haben `Process`-Objekte eine `terminate()`-Methode um den Prozess zu beenden.

Allerdings stellt sich bei einem Python-Programm das ein anderes Python-Programm startet, auch die Frage ob das überhaupt ein eigenes Programm sein muss, oder man das Python-Programm den anderen Code nicht besser als Modul importiert und dann dort aufruft, was ausgeführt werden soll. Eventuell Low-Level in einem eigenen Thread (`threading`-Modul) laufend, wenn das neben der GUI laufen soll, oder etwas „higher level“ mit dem was in `concurrent.futures` so definiert ist.

Edit: Vor kurzen angefangen und eine `start()`-Funktion die blockiert: Falls Du noch keine objektorientierte Programmierung (OOP) drauf hast, also eigene Klassen schreiben, solltest Du *jetzt* eine Pause mit Deinem Projekt einlegen und erst OOP-Grundlagen lernen. Die braucht mal für jedes nicht-triviale GUI-Programm, und es ist in der Regel einfacher erst OOP und dann GUI-Programmierung zu lernen, als beides auf einmal in Angriff zu nehmen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Yokozuna
User
Beiträge: 20
Registriert: Mittwoch 14. September 2022, 07:24

__blackjack__ hat geschrieben: Dienstag 6. Dezember 2022, 11:23 @Yokozuna: Du könntest das kooperativ programmieren, also das das andere Programm auf eine bestimmte Eingabe wartet. Ansonsten haben `Process`-Objekte eine `terminate()`-Methode um den Prozess zu beenden.

Allerdings stellt sich bei einem Python-Programm das ein anderes Python-Programm startet, auch die Frage ob das überhaupt ein eigenes Programm sein muss, oder man das Python-Programm den anderen Code nicht besser als Modul importiert und dann dort aufruft, was ausgeführt werden soll. Eventuell Low-Level in einem eigenen Thread (`threading`-Modul) laufend, wenn das neben der GUI laufen soll, oder etwas „higher level“ mit dem was in `concurrent.futures` so definiert ist.

Edit: Vor kurzen angefangen und eine `start()`-Funktion die blockiert: Falls Du noch keine objektorientierte Programmierung (OOP) drauf hast, also eigene Klassen schreiben, solltest Du *jetzt* eine Pause mit Deinem Projekt einlegen und erst OOP-Grundlagen lernen. Die braucht mal für jedes nicht-triviale GUI-Programm, und es ist in der Regel einfacher erst OOP und dann GUI-Programmierung zu lernen, als beides auf einmal in Angriff zu nehmen.
Hi, Ich verstehe was du meinst. Problem aber ist wenn ich das andere Programm importiere wird es automatisch gestartet sobald ich mein tkinter Programm starte... und wegen die terminate methode kann ich ja nicht anwenden denn ich brauche 2 verschiedene funktionen weil es ja 2 unterschiedliche Buttons sind mit einmal Start und einmal Stop.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ohne deinen Code zu kennen, steht denn da sowas drin wie 'if __name__ == '__main__':' und steht auf Modulebene ausführbarer Code mit Ausnahme der gezeigten Abfrage? Wenn ja, dann musst du das ändern und jeden ausführbaren Code in Funktionen packen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten