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

时间:2013-12-08 21:52:47

标签: python

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

5 个答案:

答案 0 :(得分:6)

使用try/except捕获KeyboardInterrupt,当您按 CTRL + C 时会引发此问题。

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

try:
    # Main code
    while True:
        print 'hi!'
except KeyboardInterrupt:
    # Cleanup/exiting code
    print 'done!'

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

答案 1 :(得分:1)

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

try:
    main()
except KeyboardInterrupt:
    cleanup()

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

答案 2 :(得分:0)

try:
    # something
except KeyboardInterrupt:
    # your code after ctrl+c

答案 3 :(得分:0)

此代码

import time 

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

给出

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

执行时按Ctrl+C 您只需要处理KeyboardInterrupt例外。

此外,您可以处理signals来设置处理程序。

答案 4 :(得分:0)

我很确定你只需要try/finally阻止。

试试这个剧本:

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()

输出应该是这样的:

blah blah
caught CTRL-C
do cleanup