subprocess pipe question
rtw at rtw.me.uk
Wed Feb 23 01:57:03 CET 2011
Rita wrote in
news:AANLkTi=w95gXoSc1TKt2BntGjqys1cbmDnoJHOKQ4YBA at mail.gmail.com in
> When using wait() it works a bit better but not consistent
> def run(cmd):
> 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:
buf = p.stdout.read( 1024 )
# do somthing with buf
if len( buf ) < 1024:
rc = p.wait()
More information about the Python-list