在shell中切断python脚本并转到解释器保存状态

时间:2014-08-06 10:42:03

标签: python shell

我知道有一些编写Python脚本的方法,以便在从终端执行时,您将进入解释器,并保留变量的结束状态。

是否可以在执行中切断python脚本并进入解释器,并保留脚本中该点的状态?例如,我有一个大循环,在每次迭代时都会将新的键值对输入字典。在循环结束时,字典被写出到文件中。现在运行脚本几个小时后,我意识到它不值得让它完成,但我仍然希望看到字典到目前为止。

脚本现在正在我的终端中运行 - 有没有从这里跳转到解释器并查看字典的当前状态?

编辑:在运行脚本之后进入解释器(保留状态)

python -i script.py

3 个答案:

答案 0 :(得分:0)

如果您已经在运行它,那么您不能将它“删除”到交互式控制台

但是,您可以尝试使用gdb附加到正在运行的进程,请参阅https://wiki.python.org/moin/DebuggingWithGdb

$ gdb python <pid of running process>

然后尝试调试它,就像使用C进程一样。

另见python: is it possible to attach a console into a running process

答案 1 :(得分:0)

这里有一个脏的解决方法的例子,使用try except和raw_input(对于python 2.7)。这不会让你进入解释器,但你可以使用ctrl + c暂停脚本并打印所需的变量来了解它的状态。

import time

t = 0

while 1:
    try:
        print time.time()
        time.sleep(5)
        t += 1
    except KeyboardInterrupt:
        print '\nt = {}'.format(t)
        # time.sleep(5)
        raw_input("Script paused! Enter anything to continue or press Ctrl+C to stop execution.")

您甚至可以将除了块调用放入pdb:

import pdb
pdb.set_trace()

进入调试器,你可以在其中使用python console。

答案 2 :(得分:-1)

不,你不能。如果要从具体状态重新启动脚本,则必须保留此状态并在重新启动脚本执行时加载它。在您的情况下,使用具有计算值的时态文件和其他来控制流量。并且不要忘记在成功时删除该文件。