Passing close_fds=True
to catProcess
helps on my system.
You don't need to create the pipe explicitly:
#!/usr/bin/python
from subprocess import Popen, PIPE, call
cat = Popen("cat", stdin=PIPE)
for line in ["First line", "Last line"]:
call(["echo", line], stdout=cat.stdin)
cat.communicate() # close stdin, wait