我有一个服务器在后台运行的线程中,我使用python -i启动它,以便能够获得交互式控制台,可以在其中输入命令并轻松调试。但是当我按下Ctrl-D时,由于服务器仍在后台线程中运行,控制台将无法退出。如何捕获Ctrl-D事件以便我可以优雅地关闭服务器并退出?我知道如何使用信号捕获Ctrl-C,但由于我经常按Ctrl-D,通常会得到一个“挂起”的终端,这真的很烦人。
谢谢!
服务器代码(简化)如下:
import threading
import atexit
class WorkerThread(threading.Thread):
def __init__(self):
super(WorkerThread, self).__init__()
self.quit = False
def run(self):
while not self.quit:
pass
def stop(self):
self.quit = True
def q():
print "Goodbye!"
t.stop()
atexit.register(q)
t = WorkerThread()
t.start()
我使用python -i test.py来运行它,以获得一个Python控制台。
t.start()
之前调用t.setDaemon(True)
。 - falsetruGetch
(https://dev59.com/hHRB5IYBdhLWcg3wyqKo#510364) 来捕获它?@falsetru - alper