Hallo,
Ich habe eine Frage, die nicht direkt in GUI passt aber doch etwas damit zu tun hat: Ich habe eine Oberfläche in Gtk geschrieben und möcht von dort über einen Button ein anderes python Skript laufen lassen, dass in einer unendlich Schleife läuft. Nun soll aber natürlich die GUI nicht so lange nicht bedienbar sein, sondern das Skript im Hintergrund gestartet werden. Wie würded ihr das lösen? Danke!
Python Skript laufen lassen ohne dass das aktuelle stoppt
Das Skript (ich nenne es Skript 1), das laufen soll, Durchsucht gegebene Directories nach Änderungen (bzw. eigentlich nur, ob ein *.raw file hinzugefügt wurde). Dieses File wird dann mittels subprocess.run() von einem externen Programm ausgewertet, dabei werden verschiedene Ordner und Files erstellt. Und am Ende werden diese Ordner und Files dann vom Skript 1 verschoben, sortiert etc.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@frcom: Meh, im ersten Beitrag hast Du noch „ein anderes python Skript“ geschrieben. Dadurch ist mein Beitrag den ich gerade geschrieben habe hinfällig. 
Also verkürzt für den jetzt veränderten Fall: Schauen ob `concurrent.futures` mehr Sinn macht als sich selbst was mit dem `threading`-Modul zu basteln. Das externe Programm mit `subprocess` in einem Thread ausführen. Und darauf achten, dass GUI-Rahmenwerke in der Regel nicht „thread safe“ sind. Bei Gtk ist aber beispielsweise `MainLoop.add_idle()` „thread safe“ und kann genutzt werden um aus anderen Threads heraus etwas im Hauptthread ausführen zu lassen.
Also verkürzt für den jetzt veränderten Fall: Schauen ob `concurrent.futures` mehr Sinn macht als sich selbst was mit dem `threading`-Modul zu basteln. Das externe Programm mit `subprocess` in einem Thread ausführen. Und darauf achten, dass GUI-Rahmenwerke in der Regel nicht „thread safe“ sind. Bei Gtk ist aber beispielsweise `MainLoop.add_idle()` „thread safe“ und kann genutzt werden um aus anderen Threads heraus etwas im Hauptthread ausführen zu lassen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Es wird durchaus erstmal ein anderes Python skript aufgerufen. Dieses wiederum ruft aber ein externes auf. Entschuldigung, für die Verwirrung :/__blackjack__ hat geschrieben: ↑Dienstag 31. März 2020, 07:53 @frcom: Meh, im ersten Beitrag hast Du noch „ein anderes python Skript“ geschrieben. Dadurch ist mein Beitrag den ich gerade geschrieben habe hinfällig.![]()
Also das erwähnte Skript 1 ist ein python skript
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@frcom: Dann würde ich erst einmal schauen ob man *das* nicht noch importieren und entsprechend in einem Thread im eigenen Programm ausführen kann, bevor man am Ende drei Prozesse am laufen hat.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware