> You might want to try just setting a flag in the signal handler > to see if that prevents the I/O operations on stdin/stdout from > being interrupted.
Tried this: <source> import signal, os, sys from terminal_info import get_terminal_size terminal_size = get_terminal_size() _bTerminalSizeChanged = False def report_terminal_size_change(signum, frame): global _bTerminalSizeChanged _bTerminalSizeChanged = True def update_terminal_size(): global _bTerminalSizeChanged, terminal_size terminal_size = get_terminal_size() _bTerminalSizeChanged = False signal.signal(signal.SIGWINCH, report_terminal_size_change) while True: # Do lots of IO (I'm trying to provoke exceptions with signal) open('/a/large/file').read() #raw_input() #sys.stdin.read() #print open('/a/large/file').read() if _bTerminalSizeChanged: update_terminal_size() print terminal_size </source> As before, the only IO case above that doesn't throw exceptions is the uncommented one. > Yup, that's the exception. Standard practice is to catch it and > retry the I/O operation. Hmm... I guess it's not that easy to "retry" IO operations on pipes and streams (stdin/stdout in this case)... And I tend to lean pretty heavily on those since I usually write UNIX style text "filters". So in case I haven't missed something fundamental I guess my best option is to accept defeat (of sorts :-) and be happy with picking a terminal width at program startup. But anyway, it's been really interesting trying this out. Thank you Grant (och Jorgen) for all help and tips! /Joel -- http://mail.python.org/mailman/listinfo/python-list