我正在尝试为我的控制台应用程序实现一个功能,该功能应该侦听按键,msvcrt.getwch()
但是当我与“输入”内置函数同时运行它时,某些东西会阻止在侦听器停止工作后输入的第一个字符显示在终端中。
即,如果我输入“asdf”并且“a”按键被 msvcrt.getwch() 捕获,则不会打印“s”(使用 python2.7、python3.6 测试):
C:\>keys.py
enter anything
keypress: a # I pressed "a"
df # I pressed "s" "d" "f", but why "s" didn't show up here?
you entered: sdf # note the "s" was captured by `input()` func
该程序:
import threading
import msvcrt
import time
def keypress_listener():
key = msvcrt.getwch()
print('keypress: '+key)
def start_keypress_listener():
t = threading.Thread(target=keypress_listener)
t.daemon = True
t.start()
def input_prompt():
i = input('enter anything\n')
print('you entered: '+i)
def main():
start_keypress_listener()
time.sleep(1)
input_prompt()
if __name__ == '__main__':
main()