On 07/06/2012 17:04, Julio Sergio wrote:
I'm trying to call an external process to filter some of my data, i.e., I'm trying to pass some information to the called process, and have this information back transformed. I started testing with the linux 'cat' command, in this way:->>> import subprocess as sp ->>> p = sp.Popen(["cat"],stdin=sp.PIPE,stdout=sp.PIPE,close_fds=True) ->>> (fi,fo) = (p.stdin, p.stdout) ->>> fi.write("SOMETHING\n") ->>> fi.flush() ->>> fo.readline() 'SOMETHING\n' ->>> fi.write("OTHER\n") ->>> fi.flush() ->>> fo.readline() 'OTHER\n' ->>> fi.write("NEXT\n") ->>> fi.flush() ->>> fo.readline() 'NEXT\n' ->>> fi.write("NEXT1\n") ->>> fi.flush() ->>> s = fo.readline() ->>> s 'NEXT1\n' Up to this point it worked as expected. However, when I tryied with the methods that write and read several lines, apparently the process got stalled: ->>> fi.writelines(["uno\n","dos\n","tres\n"]) ->>> fi.flush() ->>> s = fo.readlines() . . . Do you have any comments on this?
I believe it's waiting for the end of the input, i.e. for the pipe to close. Have you tried calling fo.readline() 3 times instead? -- http://mail.python.org/mailman/listinfo/python-list
