The key to run a background process is not create an action that depends of the result of the process.
For example, this won't work:
p = Popen(['ls', '-R', '/'], stdout = PIPE, stderr = PIPE)
But this will work:
p = Popen(['ls', '-R', '/'])
What about if you do want to write to the new process's stdin?