【发布时间】:2017-03-23 09:38:12
【问题描述】:
我尝试在 python 中运行这段代码
from msvcrt import getch
while True:
char = getch()
print char
但这会无限显示字符“ÿ”。
谁能帮我解决这个问题 在此先感谢
【问题讨论】:
-
您是从
cmd还是从IDE 启动程序?
标签: python python-2.7 getch
我尝试在 python 中运行这段代码
from msvcrt import getch
while True:
char = getch()
print char
但这会无限显示字符“ÿ”。
谁能帮我解决这个问题 在此先感谢
【问题讨论】:
cmd 还是从IDE 启动程序?
标签: python python-2.7 getch
当我通过命令行运行相同的程序时,它工作正常。 我相信您正在尝试使用 IDE?如果您使用的是 pycharm,则相同的查询已发布给他们,并且在一年内没有得到答复。
请在命令提示符下尝试相同的代码并告诉我们。
getch() 需要一个工作的“控制台”窗口,当你运行 Idle 时,你不会得到一个作为使用 pythonw.exe 的设置。因此,它在技术上无法立即处理任何击键和返回。您可以尝试通过使用标准 python 从命令行启动 Idle 来验证这一点。 (但您可能必须在该控制台窗口中触发 getch() 才能返回)
我通过从命令行启动 IDLE 亲自验证了您的程序。好吧,它至少不会无限期地返回该字符。它不会返回任何东西。
只是出于好奇,你真的需要为这个程序使用 IDLE 吗?常规命令行还不够吗?如果是,很抱歉我对这个问题帮不上什么忙。
从命令提示符启动空闲:python C:\Python27\Lib\idlelib\idle.py
【讨论】:
我不怪你想使用 IDLE 进行调试,但是 PDB 虽然不是那么方便,但它可以做任何 IDLE 可以做的事情,而且它没有这个问题(至少在 Windows XP-W10 中)。在 PDB 下,kbhit 和 getche 都可以正常工作。无论是否调试,在 W10 中,您的脚本第一次使用 getch 在用户按键之前返回垃圾,但后续使用是干净的。在早期版本的 Windows 中这不是必需的,但在实际使用之前始终使用 if kbhit() : getch() 以确保在请求用户输入之前有一个干净的缓冲区总是一个好主意。
【讨论】: