嗨我在python中有一个脚本在无限循环中运行一些动作,但有时候我必须关闭脚本并用新版本更新它,在服务器上做一些工作等等。
问题是,如何停止脚本,在关闭脚本之前,脚本在循环后进行一些操作,如sqlite连接,与代理关闭,等等。
我现在做的是ctr + c,直到它停止(在完成之前需要几次),然后手动关闭sqlite连接等。
答案 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