【问题标题】:When cancelling a Python script do something [duplicate]取消 Python 脚本时做某事[重复]
【发布时间】:2013-12-25 21:53:29
【问题描述】:

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

【问题讨论】:

标签: python


【解决方案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 来设置处理程序。

        【讨论】:

          猜你喜欢
          • 2013-02-11
          • 1970-01-01
          • 2014-12-15
          • 1970-01-01
          • 2014-12-04
          • 1970-01-01
          相关资源
          最近更新 更多