Python:无法在Windows中持续捕获KeyboardInterrupt?

1 投票
1 回答
956 浏览
提问于 2025-04-16 18:11

在Python中,我写了以下代码,想看看能不能让我的程序在按下Control+C时不结束,就像那些高级的终端应用程序,比如Vim或Dwarf Fortress。

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

可惜的是,在Windows控制台中,这段脚本过几秒就会结束。如果我在IDLE中运行,它就能按预期工作。我的Python版本是3.2.1,3.2的表现也是一样。我是不是做错了什么?

补充说明:如果我一直按着Control+C的话。

1 个回答

2

为了让程序在按下 Control-C 时不退出,你需要设置一个信号处理器。

根据Python的文档,Python默认安装了一些信号处理器:比如SIGPIPE信号会被忽略(这样在管道和套接字上的写入错误可以作为普通的Python异常来处理),而SIGINT信号会被转换成一个KeyboardInterrupt异常。所有这些默认行为都是可以被覆盖的。

所以,你需要安装一个信号处理器来捕捉 SIGINT 信号,并在捕捉到这个信号时执行你想要的操作。

在IDLE环境中,可能是因为他们安装了一个处理器,阻止了程序退出。

撰写回答