我在命令窗口(Windows 7,Python 3.1)中运行一个进程,希望用户按Esc键中止该进程。但是,按Esc键似乎不会执行任何操作,循环永远不会中断。我也试过从IDE(Wing)中运行脚本,但同样,循环无法中断。
以下是我的概念验证测试的简化版本...
import msvcrt
import time
aborted = False
for time_remaining in range(10,0,-1):
# First of all, check if ESCape was pressed
if msvcrt.kbhit() and msvcrt.getch()==chr(27):
aborted = True
break
print(str(time_remaining)) # so I can see loop is working
time.sleep(1) # delay for 1 second
#endfor timing loop
if aborted:
print("Program was aborted")
else:
print("Program was not aborted")
time.sleep(5) # to see result in command window before it disappears!
如果有人能告诉我我可能会错在哪里,我将不胜感激。
5条答案
按热度按时间1mrurvl11#
Python 3字符串是unicode,因此必须编码为字节以进行比较。试试这个测试:
或者这个测试:
或者这个测试:
6uxekuva2#
你真的应该多剥一些,就像下面这个:
问题就在这里:
msvcrt.getch()
返回bytes
,chr(27)
返回string
。在Python 3中,它们是两种不同的类型,所以“==
”部分永远不会工作,而if
语句将始终被计算为False
。解决方案对你来说应该是显而易见的。
更多关于字符串与字节的信息,请参阅Dive into Python 3。
交互式控制台对调试非常有用,尝试多用它:)
hfyxw5xn3#
你不需要encode,decode,chr,ord,....
或者如果你想在代码中看到“27”:
oymdgrw74#
Python 2/3兼容代码:
代码部分取自
pager
模块,其中包含更多内容。mfuanj7w5#
你有没有试过用另一个键来测试它是否不只是那个键?
你是否也尝试了here的例子,看看它们是否有效?