[Python-Dev] subprocess crossplatformness and async communication

Nick Craig-Wood nick at craig-wood.com
Mon Jan 26 13:15:30 CET 2009


On Sat, Jan 24, 2009 at 07:58:40AM -0800, Guido van Rossum wrote:
> I'm confused. The subprocess already allows reading/writing its
> stdin/stdout/stderr, and AFAIK it's a platform-neutral API. I'm sure
> there's something missing, but your post doesn't make it clear what
> exactly, and the recipe you reference is too large to digest easily.
> Can you explain what it is that the current subprocess does't have
> beyond saying "async communication" (which could mean many things to
> many people)?

The main problem with subprocess is that it doesn't work if you want
to have a conversation / interact with your child process.

subprocess works very well indeed for this case :-

  run child
  send stuff to stdin
  child reads stdin and writes stdout
  child exits
  read stuff from stdout

But for the conversational case (eg using it to do a remote login) it
doesn't work at all :-

  run child
  send stuff to stdin
  child reads stdin and writes stdout
  read stuff from stdout
  send stuff to stdin
  child reads stdin and writes stdout
  read stuff from stdout
  send stuff to stdin
  child reads stdin and writes stdout
  read stuff from stdout
  child exits

In subprocess "read stuff from stdout" means read stdout until the
other end closes it, not read what is available and return it, so it
blocks on reading the first reply and never returns.

Hence Anatoly's request for "async communication" and the existence of
that recipe.

  http://code.activestate.com/recipes/440554/

I've spend quite a lot of time explaning this to people on
comp.lang.python.  I usually suggest either the recipe as suggested by
Anatoly or if on unix the pexpect module.  There are other solutions I
know of, eg in twisted and wxPython.

I heard rumours of a pexpect port to Windows but I don't know how far
that has progressed.

A cross platform async subprocess would indeed be a boon!

-- 
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick


More information about the Python-Dev mailing list