取消Python脚本时会做一些事情

When cancelling a Python script do something

本问题已经有最佳答案,请猛点这里访问。

当我按CTRL + C取消正在运行的python脚本时,有没有办法在脚本终止之前运行某个python代码?


使用try/except捕获KeyboardInterrupt,这是在按CTRL + C时引发的。

这是一个演示的基本脚本:

1
2
3
4
5
6
7
try:
    # Main code
    while True:
        print 'hi!'
except KeyboardInterrupt:
    # Cleanup/exiting code
    print 'done!'

这将连续打印'hi!',直到您按CTRL + C。 然后,它打印'done!'并退出。


CTRL + C引发KeyboardInterrupt。 您可以像任何其他异常一样捕获它:

1
2
3
4
try:
    main()
except KeyboardInterrupt:
    cleanup()

如果你真的不喜欢它,你也可以使用atexit.register注册清理操作来运行(前提是你没有做一些非常讨厌的事情并导致解释器以一种时髦的方式退出)


我很确定你只需要一个try/finally块。

试试这个脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import time

def main():
    try:
        while True:
            print("blah blah")
            time.sleep(5)
    except KeyboardInterrupt:
        print("caught CTRL-C")
    finally:
        print("do cleanup")

if __name__ == '__main__':
    main()

输出应该是这样的:

1
2
3
blah blah
caught CTRL-C
do cleanup

这段代码

1
2
3
4
5
6
7
import time

try:
    while True:
        time.sleep(2)
except KeyboardInterrupt:
    print"Any clean"

1
2
deck@crunch ~/tmp $ python test.py
^CAny clean

当我执行时按Ctrl+C
您只需要处理KeyboardInterrupt异常。

您还可以处理信号以设置处理程序。


1
2
3
4
try:
    # something
except KeyboardInterrupt:
    # your code after ctrl+c