This issue has been raised a couple of times I am sure. But I have yet to find a satisfying answer.
I am reading from a subprocess and this subprocess sometimes hang, in which case a call to read() call will block indefinite, keeping me from killing it. The folloing sample code illustrates the problem: proc = subprocess.Popen(['/usr/bin/foo', '/path/to/some/file'], stdout=subprocess.PIPE) output = StringIO.StringIO() while True: r = select.select([proc.stdout.fileno()], [], [], 5)[0] if r: # NOTE: This will block since it reads until EOF data = proc.stdout.read() if not data: break # EOF from process has been reached else: output.write(data) else: os.kill(proc.pid, signal.SIGKILL) proc.wait() <Process the output...> As the NOTE: comment above suggests the call to read() will block here. I see two solutions: 1. Read one byte at a time, meaning call read(1). 2. Read non-blocking. I think reading one byte at a time is a waste of CPU, but I cannot find a way to read non-blocking. Is there a way to read non-blocking? Or maybe event a better way in generel to handle this situation? Thanks Thomas -- http://mail.python.org/mailman/listinfo/python-list