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

Windows系统中Python如何用Esc键退出含input()的while循环

解决Windows下Python同时处理输入与Esc键退出的问题

在Windows环境下,input()是阻塞式的,无法同时检测Esc按键。可以使用Python标准库中的msvcrt模块实现非阻塞按键检测,同时处理用户输入的姓名文本。以下是修改后的代码:

import msvcrt

def validate_name(name):
    # 此处保留你的姓名验证逻辑,示例为仅允许字母数字
    return name.isalnum()

def get_name_from_user():
    while True:
        print("Enter the name (Press Esc to exit):", end="", flush=True)
        name_input = []
        while True:
            # 检查是否有按键按下
            if msvcrt.kbhit():
                key_byte = msvcrt.getch()
                key_code = ord(key_byte)
                
                # 检测Esc键(ASCII码27),退出程序
                if key_code == 27:
                    print("\nExiting...")
                    return False
                # 检测Enter键(ASCII码13),提交输入
                elif key_code == 13:
                    print()
                    name = ''.join(name_input)
                    break
                # 检测退格键(ASCII码8),删除输入的最后一个字符
                elif key_code == 8:
                    if name_input:
                        name_input.pop()
                        # 更新控制台显示,模拟退格效果
                        print("\b \b", end="", flush=True)
                # 处理可打印字符,添加到输入列表
                else:
                    try:
                        char = key_byte.decode('utf-8')
                        if char.isprintable():
                            name_input.append(char)
                            print(char, end="", flush=True)
                    except UnicodeDecodeError:
                        # 忽略无法解码的特殊字符
                        pass
        
        # 验证输入的姓名
        if validate_name(name):
            return True
        else:
            print("Name allows only alpha numeric characters.")

关键逻辑说明:

  • msvcrt.kbhit():非阻塞检测是否有按键按下,不会像input()一样卡住程序
  • msvcrt.getch():读取按键的字节数据,通过ord()转换为ASCII码判断按键类型
  • 针对Esc键(ASCII码27)直接退出循环并返回False
  • 处理Enter键提交输入,收集的字符拼接成字符串后进行验证
  • 支持退格键删除输入内容,同时更新控制台显示
  • 仅处理可打印字符,避免特殊字符导致的乱码问题

这个方案基于Windows标准库,无需额外安装第三方包,适合新手在Windows环境下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:55:22