键盘中断,但适用于所有键

2024-09-22 16:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在网上搜索了一个小时,搜索类似Keyboardinterupt的命令,但随后搜索了所有的键。我需要一个尝试,除了循环,我希望人们退出使用任何键这个。有没有其他事情像键盘干扰或我需要成为黑客?你知道吗

谢谢你的时间


Tags: 命令时间键盘事情小时keyboardinterupt
1条回答
网友
1楼 · 发布于 2024-09-22 16:36:41

KeyboardInterrupt是Python捕获SIGINT系统信号时引发的异常。你可以随意举起:raise KeyboardInterrupt。但是,您不能自己生成SIGINT信号,必须将信号发送到进程。通过按CTRL-C可以实现类似的效果,它向正在运行的进程发出SIGINT信号。你知道吗

如果您有一个循环,并且希望在某个键上中断它,那么您必须侦听任何键盘事件并在捕获时引发异常;您需要一种机制来执行代码并同时侦听事件。你知道吗

我可以想象这样的情景:

  • 用代码启动Python子进程
  • 你进入一个循环,抓住任何键盘按键
  • 当您得到keypress事件时,您将SIGINT信号发送到另一个进程

例如,Python 2.7(未测试):

import multiprocessing
import time
import signal
import select
import sys
import os

def my_code():
  while True:
    print 'Do something...'
    time.sleep(1)

if __name__ == '__main__':
    p = multiprocessing.Process(target=my_code)
    p.start()

    # wait for a key
    select.select([sys.stdin],[],[])

    os.kill(p.pid, signal.SIGINT)

由于stdin缓冲,至少在Linux上,上面的代码在按键后需要[Enter]。 但是,可以使用一些Python模块轻松地解决这个问题,例如getc。你知道吗

相关问题 更多 >