停止python脚本而不会丢失数据

时间:2018-04-18 16:19:46

标签: python

我们已经在合作伙伴的计算机上运行了18个小时的脚本。我们低估了它需要多长时间,现在需要交出结果。是否可以阻止脚本运行,但仍然可以访问我们正在构建的所有列表?

我们需要向当前运行的代码添加其他代码,这些代码将使用正在填充的列表。有没有办法停止该过程,但仍然在下一部分代码中使用(生成的)列表?

我的合作伙伴正在以交互方式使用python。

更新

我们能够在用control-C中断程序后成功打印结果并复制和粘贴。

2 个答案:

答案 0 :(得分:13)

嗯,OP似乎不再需要答案了。但无论如何我都会回答其他人 确实,停止程序将删除内存中的所有数据,您仍然可以保存它。您可以在杀死进程之前注入调试会话并保存所需的任何内容。

PyCharm和PyDev都支持将他们的调试器附加到正在运行的python应用程序 有关在PyCharm中如何工作的解释,请参阅here 一旦连接了调试器,就可以在代码中设置一个断点,程序将在下次遇到该行时停止。然后,您可以检查所有变量并通过'评估'运行一些代码。特征。此代码可以保存您需要的任何变量。

我已经使用PyCharm 2018.1.1 Community Edition和Python 3.6.4对此进行了测试。

为了做到这一点,我运行了这段代码,我保存为 test.py

import collections
import time

data = collections.deque(maxlen=100)
i = 0
while True:
    data.append(i % 1000)
    i += 1
    time.sleep(0.001)

通过外部Windows PowerShell实例的命令python3 test.py。 然后我在PyCharm中打开了该文件并附加了调试器。我在第i += 1行设置了一个断点,它就在那里停了下来。然后我评估了以下代码片段:

import json
with open('data.json', 'w') as ofile:
    json.dump(list(data), ofile)

在json文件 data.json 中找到data的所有条目。

随访:
这甚至可以在交互式会话中使用!我在一个jupyter笔记本单元中运行了相同的代码,然后将调试器附加到内核。仍然打开 test.py ,我再次在与之前相同的行上设置断点,然后内核停止。然后我可以从交互式笔记本会话中看到所有变量。

答案 1 :(得分:2)

我不这么认为。停止程序也应该释放它正在使用的所有内存。

编辑:请参阅Swenzel的评论,了解其中一种方法。