By detached I assume you mean you want your script to continue running after you start the subprocess, correct? If so, I believe you'll have to fork, start the subprocess in the child process and capture it's output there.
import os
import subprocess
cmd = 'ls'
if os.fork() == 0:
process = subprocess.Popen(cmd, shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
print "subprocess pid: %d" % process.pid
stdout = process.communicate()
print stdout
else:
print 'parent...'