如何在 Python 中捕获 SIGINT?

新手上路,请多包涵

我正在开发一个启动多个进程和数据库连接的 python 脚本。我时不时地想用 Ctrl + C 信号终止脚本,并且我想做一些清理工作。

在 Perl 中我会这样做:

 $SIG{'INT'} = 'exit_gracefully';

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}

我如何在 Python 中做类似的事情?

原文由 James Thompson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 300
2 个回答

使用 signal.signal 注册您的处理程序,如下所示:

 #!/usr/bin/env python
import signal
import sys

def signal_handler(sig, frame):
    print('You pressed Ctrl+C!')
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
signal.pause()

代码改编自 这里

有关 signal 的更多文档可在 此处 找到。

原文由 Matt J 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以像对待任何其他异常一样对待它( KeyboardInterrupt )。创建一个新文件并使用以下内容从您的 shell 运行它以了解我的意思:

 import time, sys

x = 1
while True:
    try:
        print x
        time.sleep(.3)
        x += 1
    except KeyboardInterrupt:
        print "Bye"
        sys.exit()

原文由 rledley 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏