我有一个在后台线程中运行的服务器,我使用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控制台。
我有和你一样的问题,我已经解决了。我在这里的注释中找到了一个很好的答案:http://www.regexprn.com/2010/05/killing-multithreaded-python-programs.html?showComment=1336485652446#c8921788477121158557
以下是评论:
“您始终可以将线程设置为“守护程序”线程,如:
只要主线死了,所有的线都会和他一起死
感谢OP的提问,感谢评论作者的分享。
使用原始输入(使用Python3.x中的输入)。按Ctrl+D将导致eoferor异常。
更新
使用atexit - Exit handlers:
相关问题 更多 >
编程相关推荐