goodcow
goodcow

Reputation: 4795

Python subprocess calls hang?

Do subprocess calls in Python hang? That is, do subprocess calls operate in the same thread as the rest of the Python code, or is it a non-blocking model? I couldn't find anything in the docs or on SO on the matter. Thanks!

Upvotes: 1

Views: 1016

Answers (2)

dano
dano

Reputation: 94871

Most methods in the subprocess module are blocking, meaning that they want for the subprocess to complete before returning. However, subprocess.Popen is non-blocking.

result = subprocess.call(cmd) # This will block until cmd is complete
p = subprocess.Popen(cmd) # This will return a Popen object right away

Once you have the Popen object, you can use the poll instance method to see if the subprocess is complete without blocking.

if p.poll() is None: # Make sure you check against None, since it could return 0 when the process is complete.
    print "Process is still running"

Upvotes: 4

tdelaney
tdelaney

Reputation: 77337

subprocesses run in the background. In the subprocess module, there is a class called Popen that starts a process in the background. It has a wait() method you can use to wait for the process to finish. It also has a communicate() helper method that will handle stdin/stdout/stderr plus wait for the process to complete. It also has convenience functions like call() and check_call() that create a Popen object and then wait for it to complete.

So, subprocess implements a non-blocking model but also gives you blocking helper functions.

Upvotes: 2

Related Questions