Stop python script without killing the python process
我想知道是否有一种方法可以在不杀掉进程的情况下,像处理此代码那样,通过编程来停止python脚本的执行:
1 2 | import sys sys.exit() |
它是相当于ctrl+c的代码
定义自己的异常,
1 | class HaltException(Exception): pass |
把剧本包起来
1 2 3 4 5 6 7 8 9 | try: # script goes here # when you want to stop, raise HaltException("Somebody stop me!") except HaltException as h: print(h) # now what? |
这是我发现的工作——在解释器中停留,同时停止脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # ------------------------------------------------------------------ # Reset so get full traceback next time you run the script and a"real" # exception occurs if hasattr (sys, 'tracebacklimit'): del sys.tracebacklimit # ------------------------------------------------------------------ # Raise this class for"soft halt" with minimum traceback. class Stop (Exception): def __init__ (self): sys.tracebacklimit = 0 # ================================================================== # ... script here ... if something_I_want_to_halt_on: raise Stop () # ... script continues ... |
我在开发高级文本包时遇到了这个问题。我试图停止一个优秀的文本python包,在重新加载包时测试一些东西。
如果我调用
1 2 3 4 | import sys print(sys.path) sys.exit() |
-->
1 2 3 4 | import sys print(sys.path) raise ValueError() |
这将在运行
1 2 3 4 | import sys print(sys.path) raise ValueError() |
-->
1 2 3 4 5 | import sys print(sys.path) sys.tracebacklimit = 1 raise ValueError() |
相关问题:
当然,最简单的解决方案是
这将产生与终端中的ctrl+c相同的效果,但可以在脚本中的任何位置调用。无需导入或进一步定义。