我有一个在后台线程中运行的服务器,我使用 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 控制台。
最佳答案
使用 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)
关于python - 如何在 python 交互式控制台中捕获 'Ctrl-D'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17650754/