为什么Python脚本中if语句后的input()函数被忽略无法正常生效?
问题根因
你代码中enter_toggle()函数通过pynput模拟发送了回车键,这个按键事件会被运行脚本的终端捕获,写入标准输入缓冲区。当触发鼠标位置变化的if分支时,input()函数会优先读取缓冲区中已有的换行符,直接返回执行结果,不会阻塞等待用户手动输入,所以看起来就像被跳过了。
解决方案
方案1:调用input前清空标准输入缓冲区
改动最小,直接适配原有逻辑,适配全平台的代码如下:
# 先导入依赖模块 import sys import os # 新增清空输入缓冲区的函数 def clear_input_buffer(): if os.name == 'nt': import msvcrt while msvcrt.kbhit(): msvcrt.getch() else: import termios termios.tcflush(sys.stdin, termios.TCIOFLUSH) # 修改原if分支逻辑 if start_position != end_position: clear_input_buffer() input("Press any key to continue ")
方案2:改用pynput键盘监听实现等待按键
完全绕开标准输入,不会和你模拟发送的按键冲突,稳定性更高,代码示例:
# 先导入依赖模块 from pynput.keyboard import Listener # 新增等待任意按键的函数 def wait_for_any_key(): def on_press(key): # 按下任意键就停止监听 return False with Listener(on_press=on_press) as listener: listener.join() # 修改原if分支逻辑 if start_position != end_position: print("Press any key to continue ") wait_for_any_key()
内容的提问来源于stack exchange,提问作者Kaloian Kozlev
相关产品推荐
相关产品推荐

