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()
Tkinter python subprocess
- __blackjack__
- User
- Beiträge: 13106
- 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.
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
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.__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.
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
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]