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