On Sep 20, 3:24 pm, David <[EMAIL PROTECTED]> wrote: > On 9/20/07, 7stud <[EMAIL PROTECTED]> wrote: > > > > > On Sep 20, 1:25 pm, 7stud <[EMAIL PROTECTED]> wrote: > > > On Sep 20, 1:17 pm, 7stud <[EMAIL PROTECTED]> wrote: > > > > > Hi, > > > > > What is the difference between: > > > > > 1) getting the returncode directly from the subprocess object > > > > 2) calling poll() on the subprocess object? > > > > > Here is an example: > > > > > import subprocess > > > > > p = subprocess.Popen("ls", stdout=subprocess.PIPE) > > > > print p.returncode > > > > print p.poll() > > > > print > > > > > print p.stdout.read()[:5] > > > > print > > > > > print p.returncode > > > > print p.poll() > > > > print p.returncode > > > > > --output:-- > > > > None > > > > None > > > > > 10tes > > > > > None > > > > 0 > > > > 0 > > > > Hmm....after a little more testing, I don't think returncode > > > dynamically updates: > > > > import subprocess > > > import time > > > > p = subprocess.Popen("ls", stdout=subprocess.PIPE) > > > > print p.returncode > > > time.sleep(5) > > > print p.returncode > > > time.sleep(2) > > > print p.returncode > > > > print p.stdout.read()[:5] > > > print p.returncode > > > > --output:-- > > > None > > > None > > > None > > > 10tes > > > None > > > ...but then when is p.returncode set? And what good is it? > > AFAICT p.returncode is only set by Popen methods. It doesn't > automatically get set by the OS internals that manage the actual > process. > > One place where it is useful is when using Popen's communicate() > method, which returns (stdout,stderr), but not the return code. Also > it lets you call poll() but not have to save poll()'s return value.
I didn't understand your post when I first read it, but after looking at my output again, and rereading your post, I get it now. In case someone else doesn't understand it: returncode is not set by the child process--ever. return code starts off with a default value of None, and it remains None until you call a method in the subprocess module, like poll() or wait(). Those methods set and then return returncode. As a result, if you want to know what the status of the child process is, you have to call either poll() or wait(). -- http://mail.python.org/mailman/listinfo/python-list