2016-07-28 6 views
0

Ich habe eine Tkinter GUI, die ich einen Subprozess erzeugen und herausfinden möchte, wenn der Subprozess endet, ohne auf den Unterprozess zu warten, was bedeutet, dass meine GUI ist immer noch komplett interaktiv/nicht eingefroren.Python - Ermitteln, wann Subprozess mit Parent-Prozess abgeschlossen ist Tkinter GUI noch interaktiv

Ich habe viele Methoden ausprobiert, wie die in den folgenden (meist Stackoverflow) Links gefunden diejenigen: 1, 2, 3 und 4.

Ich habe festgestellt, dass ich keine Methode verwenden kann, die eine For- oder While-Schleife verwendet, um in den Zeilen zu lesen, oder das wird mit meiner GUI warten, bis die Schleife das Lesen in allem beendet. Von dem, was ich bestimmt habe, brauche ich eine Art Threading. Die Verwendung einiger Beispiele über die obigen Links scheint jedoch mein Problem nicht zu lösen. Wenn ich zum Beispiel den Code in [4] so anpassen würde, dass er funktioniert und mit meinem Code Sinn macht, würde meine GUI bis zum Programmende blockieren.

Format meines Codes:

class MyClass(tk.Frame): 
    def _init_(self,parent): 
    # calls constructor of inherited class 
    # other relevant code to initiate 
    self.initUI() 
    def runButtonFunction(self): 
    # self.process = Popen(program_I_want_to_open) 
    # ?? Need some way to determine when subprocess has 
    # exited so I can process the results created by that subprocess 
    def stopButtonFunction(self): 
    # terminates the subprocess created in run and its children at 
    # any moment subprocess is running 
    def initUI(self): 
    # creates all UI widgets, one of which is a button starts the 
    # subprocess and another button that can terminate the subprocess 

Welchen Ansatz soll ich in suchen, die Art von Funktionalität, die ich erreichen will? Irgendwelche konzeptionellen Ratschläge, Pseudocode oder tatsächliche Beispiele für Code wären sehr hilfreich.

Ich kann alles klären, was keinen Sinn ergibt.

Antwort

0

Unter Linux ist der Tod eines Kindes Prozess signalisiert. Fangen Sie dieses Signal in einem Signal-Handler.

Wenn Sie plattformübergreifenden Code (einschließlich Windows) benötigen, sollten Sie einen neuen Thread erstellen, der mit self.process kommuniziert.

Verwandte Themen