Python程序运行时检测按键触发脚本实现方案咨询
用Python内置模块实现终端内按键触发脚本
可以实现,但需依赖不同操作系统的内置模块(Python没有跨平台的全局系统级按键监听内置模块),以下分平台给出终端内的实现方案,均无需安装第三方库:
Windows 平台
使用内置的 msvcrt 模块实现非阻塞按键检测,主程序运行时可随时监听指定按键:
import msvcrt import time def trigger_script(): print("\n触发了自定义脚本!") def main_program(): count = 0 while True: print(f"主程序运行中,计数:{count}", end="\r") count += 1 time.sleep(0.5) # 检测是否有按键按下 if msvcrt.kbhit(): key = msvcrt.getch().decode('utf-8') # 按下't'键触发脚本 if key.lower() == 't': trigger_script() # 按下'q'键退出程序 elif key.lower() == 'q': print("\n程序退出") break if __name__ == "__main__": main_program()
msvcrt.kbhit():检查是否有按键输入msvcrt.getch():获取按下的按键(不会在终端回显)
Linux/macOS(Unix-like)平台
使用内置的 termios、tty 和 select 模块修改终端属性,实现非阻塞按键检测:
import sys import termios import tty import time import select def trigger_script(): print("\n触发了自定义脚本!") def main_program(): count = 0 fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: while True: print(f"主程序运行中,计数:{count}", end="\r") count += 1 time.sleep(0.5) # 设置终端为非阻塞模式 tty.setcbreak(fd) # 检查是否有按键输入(超时0秒,非阻塞) if select.select([sys.stdin], [], [], 0)[0]: key = sys.stdin.read(1) if key.lower() == 't': trigger_script() elif key.lower() == 'q': print("\n程序退出") break finally: # 恢复终端原有设置 termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) if __name__ == "__main__": main_program()
注意事项
- 以上方案仅支持终端内的按键监听,无法实现系统全局按键检测(比如程序最小化后无法监听),若需全局监听必须使用第三方库(如
pynput) - 代码需根据操作系统区分执行,可通过
sys.platform判断当前系统后分支调用对应逻辑
内容的提问来源于stack exchange,提问作者meep
相关产品推荐
相关产品推荐

