How can I capture 'Ctrl-D' in python interactive console?

console, python

Solution

Use raw_input (Use input in Python 3.x). Pressing Ctrl+D will cause EOFError exception.

try:
    raw_input()
except EOFError:
    pass

UPDATE

Use atexit - Exit handlers:

import atexit

def quit_gracefully():
    print 'Bye'

atexit.register(quit_gracefully)

Problem

I have a server which runs in a thread in the background, and I start it using python -i so I can get an interactive console where I can type in commands and easily debug it. But when I hit Ctrl-D, since the server is still running in a background thread, the console will not quit. How can I capture the Ctrl-D event so that I can shut down the server and quit gracefully? I know how to capture Ctrl-C with signals, but due to my habbit of pressing Ctrl-D I usually get a 'stuck' terminal which is really annoying. Thanks! The server code (simplified) is like this: ``` 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() ``` and I run it using python -i test.py to get a python console.

Original source

Related problems