msvcrt.getch()
是 Python 的一个标准库函数,用于从控制台读取单个字符而不回显。在不同的终端模拟器(如 cmd 和 mintty)中,其行为可能会有所不同,主要是因为它们对键盘输入的处理方式不同。
getch()
。在 cmd 中,msvcrt.getch()
通常能够正确地读取单个字符。但在 mintty 中,由于 mintty 对键盘事件的处理方式不同,可能会导致 getch()
读取到的字符与预期不符,或者根本无法读取。
为了使 msvcrt.getch()
在 mintty 中的行为与在 cmd 中相同,可以考虑以下几种方法:
termios
模块termios
模块提供了对终端 I/O 的控制,可以用来设置终端为原始模式,从而确保 getch()
能够正确读取字符。
import msvcrt
import termios
import tty
import sys
def get_char():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = msvcrt.getch()
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
print(get_char())
pywinpty
库pywinpty
是一个 Python 库,可以用来创建和管理 Windows 控制台会话。通过它,可以创建一个新的控制台会话,并在其中运行你的程序,从而确保 getch()
的行为与在 cmd 中相同。
首先,安装 pywinpty
:
pip install pywinpty
然后,在代码中使用 pywinpty
:
import pywinpty
import msvcrt
with pywinpty.PyWinpty() as p:
print("Type something and press Enter...")
while True:
if msvcrt.kbhit():
ch = msvcrt.getch()
print(f"You pressed: {ch}")
break
通过上述方法,你应该能够在 mintty 中实现与 cmd 相同的 msvcrt.getch()
行为。
领取专属 10元无门槛券
手把手带您无忧上云