The docs for the subprocess.Popen() say: Use communicate() rather than .stdin.write, .stdout.read or .stderr.read to avoid deadlocks due to any of the other OS pipe buffers filling up and blocking the child process
But if I want to send a string to stdin, how can I do that without stdin.write()? This seems to work: import subprocess as s thing = """ hey there foo man is here hey foo man is there so foo """ p = s.Popen(['grep', 'foo'], stdin = s.PIPE, stdout = s.PIPE) p.stdin.write(thing) print p.communicate() ###################### ('\they foo\n \tfoo there\n', None) Will this always avoid the deadlock problem? This also works: p = s.Popen(['grep', 'foo'], stdin = s.PIPE, stdout = s.PIPE) p.stdin.write(thing) p.stdin.close() print p.stdout.read() Is that vulnerable to deadlock? Is there a better way to write to and read from the same process? Thanks! Tobiah -- https://mail.python.org/mailman/listinfo/python-list