关闭python脚本之前的动作

时间:2015-10-12 15:04:54

标签: python

嗨我在python中有一个脚本在无限循环中运行一些动作,但有时候我必须关闭脚本并用新版本更新它,在服务器上做一些工作等等。

问题是,如何停止脚本,在关闭脚本之前,脚本在循环后进行一些操作,如sqlite连接,与代理关闭,等等。

我现在做的是ctr + c,直到它停止(在完成之前需要几次),然后手动关闭sqlite连接等。

4 个答案:

答案 0 :(得分:7)

您可以捕捉信号执行sys.exit

之外的其他内容
 import signal
 import sys

 def signal_handler(signal, frame):
     print 'You pressed Ctrl+C - or killed me with -2'
     #.... Put your logic here .....
     sys.exit(0)

 signal.signal(signal.SIGINT, signal_handler)

答案 1 :(得分:2)

您可以使用atexit模块:

import atexit

def cleanup():
    print "cleanup"
    # close connections, ...

atexit.register(cleanup)

每次正常终止时都会调用cleanup()函数(包括Ctrl-C)。

答案 2 :(得分:1)

您可以在循环周围使用try-except块并捕获KeyboardInterrupt异常。或者finally块也可以在程序以有序方式终止时进行清理。您的代码应该如下所示:

try:
    <your loop goes here>
except KeyboardInterrupt:
    <handle error and do possible special cleanup>
finally:
    <do the cleanup that always has to happen>

请注意,这样您只能在使用键盘中断而不是其他情况终止脚本时处理此情况。

您还可以使用with语句see here for more info(如评论中所述)

答案 3 :(得分:0)

System.Numerics.BigInteger