我有一个服务器在后台运行一个线程,我使用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控制台。
答案 0 :(得分:9)
使用raw_input(在Python 3.x中使用输入)。按Ctrl + D将导致EOFError异常。
try:
raw_input()
except EOFError:
pass
<强>更新强>
import atexit
def quit_gracefully():
print 'Bye'
atexit.register(quit_gracefully)
答案 1 :(得分:2)
我和你一样有同样的问题我已经修好了。我在这里的评论中找到了一个很好的答案:http://www.regexprn.com/2010/05/killing-multithreaded-python-programs.html?showComment=1336485652446#c8921788477121158557
这里,评论:
&#34;您始终可以将线程设置为&#34;守护程序&#34;线程如:
t.daemon = True
t.start()
每当主线程死亡时,所有线程都将与他一起死亡^^&#34;
感谢OP提出他的问题,并感谢评论作者的分享。