Python Skript laufen lassen ohne dass das aktuelle stoppt

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
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

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!
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

Python-Skripte laufen am besten gar nicht als eigenständiger Prozess. Wie man das, was da im Hintergrund läuft, am besten einbindet, hängt natürlich davon ab, was denn da laufen soll.
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

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.
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Ist das externe Programm in Python geschrieben?
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

sparrow hat geschrieben: Dienstag 31. März 2020, 07:42 Ist das externe Programm in Python geschrieben?
Nein und leider ist es auch kein open source o.ä. Ich habe keine Ahnung wie es funktioniert nur was raus kommt.
Benutzeravatar
__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.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

__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. ☹️
Es wird durchaus erstmal ein anderes Python skript aufgerufen. Dieses wiederum ruft aber ein externes auf. Entschuldigung, für die Verwirrung :/
Also das erwähnte Skript 1 ist ein python skript
Benutzeravatar
__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
Antworten