You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python 3.x中无需按回车,用字符终止运行程序的问题

问题解决:无法通过按键终止循环程序

问题根源

你的代码存在两个关键问题导致无法终止循环:

  • 按键判断逻辑错误:pynput捕获的字符键对象key,其字符串形式是KeyCode(char='x'),而非你判断的"'x'",所以条件永远不成立。
  • 线程终止逻辑无效:sys.exit()在listener子线程中调用时,只会终止当前子线程,主线程的while True循环不受影响。

修正后的代码

from pynput import keyboard
from time import sleep
import threading

# 创建线程安全的终止信号
stop_event = threading.Event()

def run_program():
    while not stop_event.is_set():
        print('Program is running now... press \'x\' to stop')
        sleep(1)
    print('Program stopped.')

def on_press(key):
    try:      
        if key.char == 'x':
            stop_event.set()  # 设置终止信号
            return False  # 停止listener线程
    except AttributeError:
        # 处理非字符按键(如功能键)
        pass

# 启动监听器
listener = keyboard.Listener(on_press=on_press)
listener.start()

# 运行主程序
run_program()

# 等待监听器线程结束
listener.join()

修改说明

  • 使用threading.Event作为线程安全的终止标记,主线程循环会持续检查这个标记的状态
  • 直接通过key.char判断按键字符,避免字符串匹配的错误
  • 设置终止信号后返回False,主动停止listener线程,避免资源浪费
  • 最后调用listener.join()确保监听器线程正常退出

内容的提问来源于stack exchange,提问作者bryxjam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:33:10