Leitura / escrita em um subprocesso Popen ()

Estou tentando falar com um processo filho usando a chamada python subprocess.Popen (). No meu código real, estou implementando um tipo de IPC, portanto, quero gravar alguns dados, ler a resposta, escrever mais alguns dados, ler a resposta e assim por diante. Por causa disso, não posso usar o Popen.communicate (), que funciona bem no caso simples.

Este código mostra meu problema. Ele nunca recebe a primeira resposta, trava no primeiro "resultado de leitura". Por quê? Como posso fazer isso funcionar como eu esperava?

import subprocess
p = subprocess.Popen(["sed", 's/a/x/g'],
                     stdout = subprocess.PIPE,
                     stdin = subprocess.PIPE)

p.stdin.write("abc\n")
print "Reading result:"
print p.stdout.readline()

p.stdin.write("cat\n")
print "Reading result:"
print p.stdout.readline()