如何停止Python脚本但保持解释器运行

时间:2017-01-19 17:31:21

标签: python python-2.7

我有一个Python脚本,我想执行它到某一点,然后停止,并保持解释器打开,所以我可以看到它定义的变量等。

我知道我可以生成异常,或者我可以通过运行pdb.set_trace()来调用调试器,然后停止调试器,这是我目前使用的。

...但是有没有一个命令会停止脚本,好像它已经完全结束了?这相当于评论脚本的其余部分(但我不喜欢这样做),或者在函数中添加早期的return语句。

似乎这样的东西必须存在,但到目前为止我还没有找到它。

编辑:我的用例的更多详细信息

我通常在Spyder中使用常规Python控制台。 IPython似乎是一件好事,但(至少对于我目前使用的版本,2.2.5),一些普通的控制台功能在IPython中不能很好地工作(内省,自动完成) )。 通常,我的代码生成matplotlib数字。在调试模式下,那些无法更新(据我所知),这就是为什么我需要完全脱离脚本,而不是解释器)。 调试器的另一个限制是我不能在其中执行循环:您可以将循环的代码复制/粘贴到常规控制台中并使其执行,但这不会在调试器中起作用(在至少在我的Spyder版本中。)

3 个答案:

答案 0 :(得分:6)

如果使用python -i <script>调用程序,则解释程序将在脚本结束后保持活动状态。 raise SystemExit是迫使它在任意点结束的最简单方法。

答案 1 :(得分:5)

如果你有ipython(强烈推荐),你可以去你的程序中的任何一点并添加以下行

import IPython
IPython.embed()

一旦你的程序到达那一点,embed命令将在该上下文中打开一个新的IPython shell。

我真的很喜欢那些我不想走完全pdb路线的事情。

答案 2 :(得分:2)

如果您使用的是Python Shell,只需按CTRL + C即可抛出KeyboardInterrupt。然后,您可以在抛出异常时检查程序的状态。

x = 0
while True:
    x += 1

运行脚本......

  

在win32上的Python 2.7.6(默认,2013年11月10日,19:24:18)[MSC v.1500 32位(英特尔)]   输入“copyright”,“credits”或“license()”以获取更多信息。   &GT;&GT;&GT; ================================ RESTART ================= ===============

     

追踪(最近一次呼叫最后一次):

     

文件“C:/Python27/test.py”,第2行,

     

而True:

     

一个KeyboardInterrupt

     

&GT;&GT;&GT; X

     

15822387