python - 在不丢失数据的情况下停止 python 脚本

标签 python

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

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

我的伙伴正在交互式地使用 python。


更新

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

最佳答案

好吧,OP 似乎不再需要答案了。但无论如何,我都会为遇到此问题的其他人回答。
虽然停止程序确实会从内存中删除所有数据,但您仍然可以保存它。您可以注入(inject)调试 session 并在终止进程之前保存所需的任何内容。

PyCharm 和 PyDev 都支持将它们的调试器附加到正在运行的 Python 应用程序。
参见 here了解它在 PyCharm 中的工作原理。
附加调试器后,您可以在代码中设置断点,程序将在下次遇到该行时停止。然后您可以检查所有变量并通过“评估”功能运行一些代码。此代码可以保存您需要的任何变量。

我已经使用 PyCharm 2018.1.1 社区版和 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 的所有条目。


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

关于python - 在不丢失数据的情况下停止 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49904516/

相关文章:

python - 如何使 kafka-python 或 pykafka 与 uwsgi 和 gevent 一起作为异步生产者工作?

python - Django mysql 准备语句

python - ABC 的计算成本

python 套接字应用程序未按预期从终端运行

python - 打开一个大的 JSON 文件

python - 在 django admin 中查看上传图像的缩略图

python - 我需要什么代码才能将我的 raspberry pi 中的 csv 文件写入本地网络中的文件夹?

python - Python 中的 KNX 和 KNXnet/IP 实现

python - Pandas 数据框根据索引和列值删除行

python - Pycharm 中的自动光标定位