Home > OS >  How check if a process has finished but without waiting?
How check if a process has finished but without waiting?

Time:09-23

I'm doing a small project in python/tkinter and I have been looking for a way to check if a process has finished but "without waiting". I have tried with:

process = subprocess.Popen(command)
while process.poll() is None:
    print('Running!')
print('Finished!')

or:

process = subprocess.Popen(command)
stdoutdata, stderrdata = process.communicate()
print('Finished!')

Both codes execute the command and print "Finished!" when the process ends, but the main program freezes (waiting) and that's what I want to avoid. I need the GUI to stay functional while the process is running and then run some code right after it finishes. Any help?

CodePudding user response:

It's common that you use the Thread module for that purpose:

For example:

# import Thread
from threading import Thread
import time

# create a function that checks if the process has finished
process = True
def check():
    while process:
        print('Running')
        time.sleep(1) # here you can wait as much as you want without freezing the program
    else:
        print('Finished')

# call the function with the use of Thread
Thread(target=check).start()
# or if you want to keep a reference to it
t = Thread(target=check)
# you might also want to set thread daemon to True so as the Thread ends when the program closes
t.deamon = True
t.start()

This way when you do process=False the program will end and the output will show 'Finished'

  • Related