Python:Tornado ioloop在KeyboardInterrupt上没有例外地被杀死

时间:2014-02-16 07:08:22

标签: python windows tornado keyboardinterrupt

当我在以下程序中阻止龙卷风^C时按ioloop.start()时,Python会立即退出并且不会引发KeyboardInterrupt(或任何其他异常)。发生了什么,我怎么能抓住^C

import tornado.ioloop
import tornado.web
ioloop = tornado.ioloop.IOLoop.instance()

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])


if __name__ == "__main__":
    application.listen(8888)

    # has no effect
    # tornado.ioloop.PeriodicCallback(lambda:None, 1000).start()

    print 'starting'

    try:
        ioloop.start()
    except KeyboardInterrupt:
        print '^C pressed'

    finally:
        print 'done'

输出:

$ /c/Python27x32/python test.py
starting

$

预期产出:

$ /c/Python27x32/python test.py
starting
^C pressed
done

$

我正在跑步:

  • Windows 8.0 x64,
  • 在win32上的Python 2.7.6(默认,2013年11月10日,19:24:18)[MSC v.1500 32位(英特尔)]
  • 龙卷风== 3.2

2 个答案:

答案 0 :(得分:0)

我已确定此问题是因为我在Windows上使用Git Bash控制台。当我使用常规命令提示符时,一切都按预期工作。我怀疑Git Bash正在抓住^ C并杀死这个过程。

答案 1 :(得分:-1)

Windows为控制台提供了不同的信号

试 Ctrl +中断 要么 Ctrl + D