如何在期望用户输入()时检测'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 是,

  1. msvcrt.kbhit() 无法与 input() 函数一起使用。因为它总是不等待键盘敲击。所以直接使用 msvcrt.getch() 效果很好。
  2. 为问题提供的代码主要基于 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 类似,但会打印按下的键。