我有这个代码:
def getch(self):
if os.name == 'posix':
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
elif os.name == 'nt':
ch = msvcrt.getch()
return ch
这在 python 2.6 和 2.7 上运行得很好,但每当我尝试在 python 3.0 和更高版本上测试它时,stdin.read 调用会打印出一个新行,我认为这可能是因为 python 3 更改为 sys. stdin、stdout 和 stderr,但我不确定如何修复它
编辑:在 OS X 10.6.4 python 3.1 和 Ubuntu 9.04 python 2.6 上运行这发生在我身上。
请您参考如下方法:
这可能是特定于平台的问题。您是否在不同的基于 POSIX 的操作系统(例如 Linux、BSD、Darwin 等)上尝试过代码?你的结果一样吗?它们处理终端操作的方式都略有不同,因此您可能需要考虑的不仅仅是 posix 与 nt,还需要更深入一些。
