好的,我有两个答案给你。
第一个答案
def jobOne():
pass
def jobTwo():
pass
def jobThree():
pass
def jobFour():
pass
interrupted = False
finished = False
jobs = [jobOne, jobTwo, jobThree, jobFour]
jobsCarriedOut = [0] * len(jobs)
currentJob = 0
while (not finished or not interrupted):
try:
jobs[currentJob]()
jobsCarriedOut[currentJob] += 1
currentJob += 1
if currentJob == len(jobs):
currentJob, finished = 0, True
else:
finished = False
except KeyboardInterrupt:
interrupted = True
print(jobsCarriedOut)
该作品将退出一次KeyboardInterrupt
已被触发并且所有作业均已完成。
第二个答案
我只是简单地用谷歌搜索了一下禁用键盘中断Python并发现了这个如何覆盖键盘中断? (Python) https://stackoverflow.com/a/6990487/4180176并提出了这个略有不同的代码。
import signal
def signal_handler(signal, frame):
global interrupted
interrupted = True
def jobOne():
pass
def jobTwo():
pass
def jobThree():
pass
def jobFour():
pass
interrupted = False
finished = False
jobs = [jobOne, jobTwo, jobThree, jobFour]
jobsCarriedOut = [0] * len(jobs)
currentJob = 0
signal.signal(signal.SIGINT, signal_handler)
while (not finished or not interrupted):
jobs[currentJob]()
jobsCarriedOut[currentJob] += 1
currentJob += 1
if currentJob == len(jobs):
currentJob, finished = 0, True
else:
finished = False
print(jobsCarriedOut)
我从未使用过信号库(甚至听说过它),所以这里是文档 https://docs.python.org/2/library/signal.html
EDIT我从来没有使用过全局变量,所以我的用法可能是错误的。
EDIT TWO第一个示例由于没有捕获每一步的错误,因此只能在 80% 的时间内运行