import sys
import time
def getch(timeout=None):
"""获取单个字符输入,支持超时返回None(跨平台版)"""
try:
import msvcrt
if timeout is None:
return msvcrt.getch().decode('utf-8')
else:
start_time = time.time()
while True:
if msvcrt.kbhit():
return msvcrt.getch().decode('utf-8')
elapsed = time.time() - start_time
if elapsed >= timeout:
return None
time.sleep(min(timeout - elapsed, 0.1))
except ImportError:
import tty
import termios
import select
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setcbreak(fd)
if timeout is not None:
rlist, _, _ = select.select([sys.stdin], [], [], timeout)
return sys.stdin.read(1) if rlist else None
else:
return sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
except Exception as e:
print(f"错误: {e}")
return None
print("请在三秒内按下任意键: ")
result = getch(timeout=3)
print(f"\n结果: {result if result else '超时未输入!'}")