Это работает на Ubuntu 8.04.1, Python 2.5.2, я не получаю такой ошибки. Может быть, вы должны попробовать это из командной строки, eclipse может использовать свой собственный стандартный ввод, я получаю точно такую же ошибку, если я запускаю его из Wing IDE, но из командной строки это работает отлично
Причина в том, что IDE, например Wing, использует собственный класс netserver.CDbgInputStream как sys.stdin.
поэтому sys.stdin.fileno равен нулю, поэтому ошибка.
В основном IDE stdin не является tty (print sys.stdin.isatty () - False)
class _GetchUnix:
def __init__(self):
import tty, sys
def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
getch = _GetchUnix()
print getch()