Hi, I use non-blocking io to check for timeouts. Sometimes I get EAGAIN (Resource temporarily unavailable) on write(). My working code looks like this. But I am unsure how many bytes have been written to the pipe if I get an EAGAIN IOError. Up to now I retry with the same chunk.
If I get EAGAIN can I just sleep, and then retry with the same data chunk? pipe=subprocess.Popen(cmd, stdin=subprocess.PIPE, bufsize=-1) fcntl.fcntl(pipe.stdin, fcntl.F_SETFL, os.O_NONBLOCK) .... chunk_size=1024 while select.select([], [pipe.stdin], [], 5): check_timeout() chunk=fd.read(chunk_size) for i_eagain in range(10): try: pipe.stdin.write(chunk) except IOError, exc: if exc.errno==errno.EAGAIN: logging.info('write to pipe %s EAGAIN. I will try again i=%s. %s' % (cmd, i_eagain, exc)) time.sleep(.3) continue logging.error('write to pipe %s failed: %s' % (cmd, exc), exc_info=True) raise break # write was successful (default) else: raise Exception('Too many EAGAIN on write %s %s' % (cmd, exc), exc_info=True) Thomas -- Thomas Guettler, http://www.thomas-guettler.de/ E-Mail: guettli (*) thomas-guettler + de -- http://mail.python.org/mailman/listinfo/python-list