0

I have a Tkinter GUI that I want to spawn a subprocess and find out when the subprocess ends without waiting for the subprocess to terminate, which means that my GUI is still completely interactable / isn't frozen.

I have tried many methods such as the ones found in the following (mostly stackoverflow) links: 1, 2, 3, and 4.

I've found that I can't use any method that uses a for or while loop to read in the lines or that will end up with my GUI waiting for the loop to finish reading in everything. From what I've determined, I will need some kind of threading. However, using some of the examples through the links above don't seem to address my issue; for instance, adapting the code in [4] to work and make sense with my code would result in my GUI freezing until the program terminated.

Format of my code:

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

What approach should I be looking into to achieve the kind of functionality I want? Any conceptual advice, pseudocode, or actual examples of code would be very help.

I can clarify anything that doesn't make sense.

1 Answers1

0

On Linux you are signaled the death of a child process. Catch that signal in a Signal handler.

If you need cross-platform code (including Windows) you should create a new thread that communicates with self.process.