SIGALRM problem

Paul Rubin http
Mon Oct 13 12:45:46 EDT 2008


I'm trying to run a command on a remote host, something like:

   result = os.popen('ssh otherhost mycommand').read()

It is possible that the other host is down, in which case the ssh
command hangs, so I want my script to time out if this happens:

   def timeout(*x):
      raise IOError, 'timeout'
   signal(SIGALRM, timeout)
   alarm(20)

   result = os.popen('ssh otherhost mycommand').read()

I would expect the above to raise IOError if the ssh doesn't return
within 20 seconds, but it seems to hang when the other host is down,
until eventually the tcp connection times out after something like 5
minutes (which is much longer than I want to wait).

Anyone know if os.popen somehow pre-empts the alarm signal?  If it
does, I'd consider that a bug.

Thanks
--Paul



More information about the Python-list mailing list