When I call getch() on Mac OS X, the first call is blocking and waits for a keypress. But subsequent calls immediately returns an empty string rather than blocking for a keypress. As best I can tell, the termios.tcsetattr call to restore the old settings (vmin and vtime) does not take affect. Calling tcgetattr shows that vmin & vtime have been restored, but apparently something is causing them not to work. I've tried changing that tcsetattr method to use the TCSANOW or TCSAFLUSH flags, but it doesn't help.
The root problem seems like it might be within OS X or an OS X library, but a workaround in this "pager" library would be extremely helpful.