This is a good solution thanks. You should wiki this somewhere. For extra points is there a way to speed up the p.stdout.read(bufsize) ?
On Tue, Feb 22, 2011 at 7:57 PM, Rob Williscroft <r...@rtw.me.uk> wrote: > Rita wrote in > news:AANLkTi=w95gxosc1tkt2bntgjqys1cbmdnojhokq4...@mail.gmail.com in > gmane.comp.python.general: > > > > > When using wait() it works a bit better but not consistent > > def run(cmd): > > p=subprocess.Popen(cmd,stdout=subprocess.PIPE) > > rc=p.wait() > > print rc > > return p.stdout > > > > > When the output of cmd is a small ascii file it works perfectly fine, > > but when the file is large (more than 2MB) the process just waits for > > ever (I am guessing its blocking?). > > Your OS has supplied a pipe buffer of 2MB, its full and the prossess > is waiting until you read something from the pipe (i.e. p.stdout.read()). > > > When I use the communicate call > > it works perfectly but my process is consuming way too much memory. > > > > Is there a better way to get my return code consistently efficiently > > and not take up so much memory? > > If you don't need the processes output then don't use the PIPE argument. > If you do you will need to read from p.stdout until the process is > complete, then get the return code: > > while True: > buf = p.stdout.read( 1024 ) > # do somthing with buf > if len( buf ) < 1024: > break > > rc = p.wait() > > Rob. > > -- > http://mail.python.org/mailman/listinfo/python-list > -- --- Get your facts first, then you can distort them as you please.--
-- http://mail.python.org/mailman/listinfo/python-list