spawning a process with subprocess
Diez B. Roggisch
deets at nospam.web.de
Mon Nov 26 19:50:00 CET 2007
> I've used subprocess with 2.4 several times to execute a process, wait
> for it to finish, and then look at its output. Now I want to spawn
> the process separately, later check to see if it's finished, and if it
> is look at its output. I may want to send a signal at some point to
> kill the process. This seems straightforward, but it doesn't seem to
> be working.
> Here's my test case:
> import subprocess, time
> cmd = "cat somefile"
> thread = subprocess.Popen(args=cmd.split(), shell=True,
> stdout=subprocess.PIPE, stdin=subprocess.PIPE,
> stderr=subprocess.STDOUT, close_fds=True)
> print thread.returncode
> print "returncode = ", thread.returncode
> for line in thread.stdout:
> print "stdout:\t",line
> This will just print the returncode of None forever until I Ctrl-C it.
> Of course, the program works fine if I call thread.communicate(), but
> since this waits for the process to finish, that's not what I want.
> Any help would be appreciated.
I have difficulties understanding what you are after here. To me it
looks as if everything works as expected. I mean you periodically check
on the liveness of the "thread" - which is what you describe above. All
you are missing IMHO is the actual work in this program.
This assumes that your do_work()-method communicates the wish to end the
sub-process using it's returnvalue.
More information about the Python-list