Python:无法在Windows中不断捕获键盘中断?

时间:2011-05-23 16:11:51

标签: python windows terminal

在Python中,我编写了以下代码,看看我是否可以让我的程序不像所有那些花哨的终端应用程序(如Vim或Dwarf Fortress)那样在Control + C上终止。

def getinput():
    x = input('enter something: ')
while True:
    try:
            getinput()
    except KeyboardInterrupt:
            pass

不幸的是,在Windows控制台中,此脚本会在几秒钟后终止。如果我在IDLE中运行它,它会按预期工作。 Python版本是3.2.1,3.2的行为相同。我做错了吗?

编辑:如果我按住Control + C,那就是。

1 个答案:

答案 0 :(得分:2)

为了不在Control-C终止,您需要设置信号处理程序。 来自Python文档here

  

Python安装少量   信号处理程序默认情况下:SIGPIPE是   忽略(所以在管道上写错误   套接字可以报告为普通的   Python例外)和SIGINT是   翻译成KeyboardInterrupt   例外。所有这些都可以   重写的。

因此,您需要安装一个信号处理程序来捕获SIGINT信号并在此处执行您想要的操作。

IDLE的行为可能是他们安装了一个阻止应用程序退出的处理程序。