When I proposed to add subprocess_shell/subprocess_exec I was keeping in mind http://bugs.python.org/issue7839 Still think that copying suboptimal desing in new library is bad idea.
About None/PIPE as default for stdin, stdout and stderr. None links to parent's standard streams, right? Perhaps it's good for simple console script which executes some commands like sh/bash does. I assumed that behavior is not perfect for reactive systems with running event loop. Say, if you don't need stderr so maybe DEVNULL is better? Returning from create_subprocess_* some facade without public protocol method is good idea. That object should look like subprocess transport with streams, not protocol -- as we have separate StreamReaderProtocol and StreamReader itself. I'm ok with .returncode. .poll() is not required, yield from proc.wait() should be enough. The same for .communicate(), I this this method was invented to hide complexness of working with *blocking* stdstreams and contains micro-event-loop inside. call()/check_call()/check_output() -- don't know.
