【发布时间】:2017-04-27 19:18:23
【问题描述】:
我已经在网上搜索了大约一个小时来搜索诸如 Keyboardinterupt 之类的命令,然后搜索所有键。我需要这个尝试和除外循环,我希望人们使用任何键退出。还有其他类似 KeyboardInterupt 的东西还是我需要成为黑客?
感谢您的宝贵时间
【问题讨论】:
标签: python python-3.x try-except
我已经在网上搜索了大约一个小时来搜索诸如 Keyboardinterupt 之类的命令,然后搜索所有键。我需要这个尝试和除外循环,我希望人们使用任何键退出。还有其他类似 KeyboardInterupt 的东西还是我需要成为黑客?
感谢您的宝贵时间
【问题讨论】:
标签: python python-3.x try-except
KeyboardInterrupt 是 Python 捕获 SIGINT 系统信号时引发的异常。你可以自己随意提升:raise KeyboardInterrupt。但是,您不能自己生成 SIGINT 信号,必须将信号发送到进程。按下 CTRL-C 可以达到类似的效果,它会向正在运行的进程发出 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)轻松解决此问题。
【讨论】: