bhunter schrieb: > Hi, > > 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) > > while(1): > time.sleep(1) > if(thread.returncode): > break > else: > 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. So while True: if do_work(): if thread.returncode: break else: thread.kill() This assumes that your do_work()-method communicates the wish to end the sub-process using it's returnvalue. Diez -- http://mail.python.org/mailman/listinfo/python-list