Entendiendo popen.communicate

Tengo un guión llamado1st.py que crea un REPL (read-eval-print-loop):

print "Something to print"
while True:
    r = raw_input()
    if r == 'n':
        print "exiting"
        break
    else:
        print "continuing"

Entonces lancé1st.py con el siguiente código:

p = subprocess.Popen(["python","1st.py"], stdin=PIPE, stdout=PIPE)

Y luego probé esto:

print p.communicate()[0]

Falló, proporcionando este rastreo:

Traceback (most recent call last):
  File "1st.py", line 3, in <module>
    r = raw_input()
EOFError: EOF when reading a line

¿Puedes explicar lo que está pasando aquí por favor? Cuando yo usop.stdout.read(), cuelga para siempre.

Respuestas a la pregunta(3)

Su respuesta a la pregunta