取消 Python 脚本时做某事[重复]
Posted
技术标签:
【中文标题】取消 Python 脚本时做某事[重复]【英文标题】:When cancelling a Python script do something [duplicate] 【发布时间】:2013-12-25 21:53:29 【问题描述】:当我按 CTRL+C 取消正在运行的 python 脚本时,有没有办法在脚本终止之前运行某个 python 代码?
【问题讨论】:
你可以捕捉到KeyboardInterrupt
错误;或者你可以设置a signal handler;或者你可以在退出时做一些事情using the atexit module。
【参考方案1】:
使用try/except
捕获KeyboardInterrupt
,当您按下CTRL+C 时会引发该问题。
下面是一个基本的演示脚本:
try:
# Main code
while True:
print 'hi!'
except KeyboardInterrupt:
# Cleanup/exiting code
print 'done!'
这将持续打印'hi!'
,直到您按下CTRL+C。然后,它打印'done!'
并退出。
【讨论】:
【参考方案2】:CTRL+C 引发KeyboardInterrupt
。您可以像任何其他异常一样捕获它:
try:
main()
except KeyboardInterrupt:
cleanup()
如果你真的不喜欢这样,你也可以使用atexit.register
来注册清理操作以运行(前提是你没有做一些非常讨厌的事情并导致解释器以一种时髦的方式退出)
【讨论】:
atexit.register
是一个很好的选择。【参考方案3】:
try:
# something
except KeyboardInterrupt:
# your code after ctrl+c
【讨论】:
【参考方案4】:我很确定你只需要一个 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
【讨论】:
【参考方案5】:这段代码
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 来设置处理程序。
【讨论】:
以上是关于取消 Python 脚本时做某事[重复]的主要内容,如果未能解决你的问题,请参考以下文章