Ответ 1
Ну, OP, похоже, больше не нуждается в ответе. Но я все равно отвечу, если кто-то еще придет на это.
Хотя верно, что остановка программы приведет к удалению всех данных из памяти, которые вы все еще можете сохранить. Вы можете ввести сеанс отладки и сохранить все, что вам нужно, прежде чем вы убьете процесс.
И PyCharm, и PyDev поддерживают прикрепление своего отладчика к запущенному приложению python.
См. Здесь объяснение, как это работает в PyCharm.
Как только вы присоедините отладчик, вы можете установить контрольную точку в своем коде, и программа остановится, когда она попадет в эту строку в следующий раз. Затем вы можете проверить все переменные и запустить некоторый код с помощью функции "Оценить". Этот код может сохранить любую переменную, в которой вы нуждаетесь.
Я проверил это с 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)
с помощью команды python3 test.py
из внешнего экземпляра Windows PowerShell. Затем я открыл этот файл в PyCharm и подключил отладчик. Я установил точку останова в строке i += 1
и она остановилась прямо там. Затем я оценил следующий фрагмент кода:
import json
with open('data.json', 'w') as ofile:
json.dump(list(data), ofile)
И нашел все записи из data
в json файле data.json.
Следовать за:
Это даже работает в интерактивном сеансе! Я запустил тот же код в ячейке ноутбука jupyter, а затем подключил отладчик к ядру. Все еще имея test.py open, я снова установил точку останова в той же строке, что и раньше, и ядро остановилось. Затем я мог видеть все переменные из сеанса интерактивного ноутбука.