Coding-python-非阻塞输入实现

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/python
# 导入必要的库
import sys
import tty
import termios
import atexit

try:
# 主循环开始
while True:
# 提示用户输入,并允许即时响应按键(无需按回车)
print("请输入 '1' 打印1, '2' 打印2, 或输入 'q' 退出程序:")
# 获取标准输入设备的文件描述符
fd = sys.stdin.fileno()
# 保存当前的终端设置,以便稍后恢复
old_settings = termios.tcgetattr(fd)
try:
# 改变输入模式,使得可以立即读取按键
tty.setraw(sys.stdin.fileno())
# 读取用户输入的第一个字符
ch = sys.stdin.read(1)
finally:
# 恢复终端的原始设置
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

# 根据用户输入执行相应操作
if ch == '1':
print("1")
elif ch == '2':
print("2")
elif ch.lower() == 'q': # 兼容大小写输入的退出指令
print("程序即将退出...")
break # 退出循环
else:
print("无效的输入,请输入 '1', '2', 或 'q'。")
except KeyboardInterrupt: # 捕获Ctrl+C中断
print("\n程序因键盘中断而退出。")
finally:
# 确保在任何情况下电机都能安全关闭
print("退出")