如何在期望用户输入()时检测'ESC'按键
How to Detect 'ESC' keypress while expecting input() from user
我试过使用
if msvcrt.kbhit():
key_stroke = msvcrt.getch()
if key_stroke==chr(27).encode(): #b'\x1b'
print ("Esc key pressed")
sys.exit()`
在 data=input('Enter a value:')
之前和之后,但是 Esc key_stroke 没有被检测到
也就是说,在期望用户使用 input() 函数输入时,如果用户按 Esc 键,我想做 sys.exit()
这有效,
import msvcrt
data=input('Enter a value : ')
if(data):
print(data)
else:
print('invalid value')
key=msvcrt.getch()
if(msvcrt.getch() == chr(27).encode()):
print('Escape key pressed')
这个问题和上述 问题之间的主要 difference/relation 是,
msvcrt.kbhit()
无法与 input()
函数一起使用。因为它总是不等待键盘敲击。所以直接使用 msvcrt.getch()
效果很好。
- 为问题提供的代码主要基于 msvcrt 库,并且该库在 Python IDLE 控制台中没有按预期工作,但在 windows 命令提示符下完美运行
如有错误请指正
试试这个:
import sys
import msvcrt
def func():
print ('Enter user input:')
while True:
if msvcrt.kbhit():
key_stroke = msvcrt.getche()
if key_stroke==chr(27).encode():
print ("Esc key pressed")
sys.exit()
else:
#print (str(key_stroke).split("'")[1],"key pressed")
i=str(key_stroke).split("'")[1]+input()
print ("User input:",i)
func()
注意:我使用的是 getche 而不是 getch,它与 getch 类似,但会打印按下的键。
我试过使用
if msvcrt.kbhit():
key_stroke = msvcrt.getch()
if key_stroke==chr(27).encode(): #b'\x1b'
print ("Esc key pressed")
sys.exit()`
在 data=input('Enter a value:')
之前和之后,但是 Esc key_stroke 没有被检测到
也就是说,在期望用户使用 input() 函数输入时,如果用户按 Esc 键,我想做 sys.exit()
这有效,
import msvcrt
data=input('Enter a value : ')
if(data):
print(data)
else:
print('invalid value')
key=msvcrt.getch()
if(msvcrt.getch() == chr(27).encode()):
print('Escape key pressed')
这个问题和上述
msvcrt.kbhit()
无法与input()
函数一起使用。因为它总是不等待键盘敲击。所以直接使用msvcrt.getch()
效果很好。- 为问题提供的代码主要基于 msvcrt 库,并且该库在 Python IDLE 控制台中没有按预期工作,但在 windows 命令提示符下完美运行
如有错误请指正
试试这个:
import sys
import msvcrt
def func():
print ('Enter user input:')
while True:
if msvcrt.kbhit():
key_stroke = msvcrt.getche()
if key_stroke==chr(27).encode():
print ("Esc key pressed")
sys.exit()
else:
#print (str(key_stroke).split("'")[1],"key pressed")
i=str(key_stroke).split("'")[1]+input()
print ("User input:",i)
func()
注意:我使用的是 getche 而不是 getch,它与 getch 类似,但会打印按下的键。