title: How can I capture 'Ctrl-D' in python interactive console?
body: <p>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.</p>
  
  <p>Thanks!</p>
  
  <p>The server code (simplified) is like this:</p>
  
  <pre><code>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()
  </code></pre>
  
  <p>and I run it using python -i test.py to get a python console.</p>