Форум сайта python.su
Интересует, есть ли в Python модули, позволяющие сохранять состояние программы.
Сейчас я не придумал ничего лучше, как сохранять основные переменные, по которым можно будет восстановить состояние программы, в текстовый документ.
Вот только беда: написать прогу для считывания этих параметров проблематично. Например, в xml tree, я работаю с элементами в определенных ячейках памяти. При повторном считывании документа, создаются новые элементы уже в других ячейках. И понять, какой именно элемент был сохранен можно только по его атрибутам, в которых может быть записано что-угодно.
Т.е проблема решаема, но заставляет помучиться.
П.с Знаю, что это как с кнопкой в Photoshop "сделать все хорошо", но мало ли.
Отредактировано JOHN_16 (Дек. 5, 2017 10:53:48)
Офлайн
Не совсем понятно, что вы хотите, но все человечество давно работает с файлами конфигураций.
Хранить конфиги можно в файлах или бд.
Для работы с конфиг файлами в python есть модуль
ConfigParser.
Если конечно я правильно понял вопрос.
Офлайн
GuljacaА вы не пробовали окошечко свернуть? Состояние программы при этом почти сохраняется. Окошко потом развернуть можно. Чем это отличается от того что вам нужно?
есть ли в Python модули, позволяющие сохранять состояние программы.
Офлайн
Guljacaдавайте вы уточните что такое в вашем понимании “состояние программы”?
модули, позволяющие сохранять состояние программы.
GuljacaВы работаете напрямую с памятью? очень сомневаюсь… тем более что xml tree это не позволяет , опишите более внятно что вы делаете, используя общепринятые формулировки, дабы не возникло недопонимания.
И понять, какой именно элемент был сохранен можно только по его атрибутам, в которых может быть записано что-угодно. пример, в xml tree, я работаю с элементами в определенных ячейках памяти.
[code python][/code]
Отредактировано PEHDOM (Дек. 5, 2017 10:15:15)
Офлайн
Под записью информации в текстовый файл я и подразумевал различные текстовые форматы, типа .xml, .ini, да и просто .txt
doza_and Последовательность свернуть окошечко, выключить ПК, включить ПК, развернуть окошечко не всегда работает.
Под сохранением состояния программы, могу привести в качество примера Ren-Py. Внутри можно нагородить сколь угодно сложный код, но при сохранении будет открыто именно то место, на котором ты остановился.
Ниже пример работы с XML и описание того, чего я хочу добиться.
import xml.etree.ElementTree as ET
import os
import random
class Element():
def __init__(self, info):
self.info = info
c_element_d = {}
with open("xml/test.xml", 'rb') as xml_file:
tree = ET.parse(xml_file)
root = tree.getroot()
# Выглядит глупо, но тут может быть и куда более сложная информация. Это пример
c_element_d[root] = Element(root.tag)
for child in root:
c_element_d[child] = Element(root.tag)
# Как пример, при первом запуске получаю значения
# <Element 'element' at 0x0000000002700D68
# <Element 'element' at 0x0000000002700D86
# При втором запуске (загрузке) получаю значения для тех же элементов
# <Element 'element' at 0x0000000002700D12
# <Element 'element' at 0x0000000002700D45
# Load
# При загрузке информации мне нужно автоматически показать информацию
# Из элемента <Element 'element' at 0x0000000002700D68>, найдя его среди
# <Element 'element' at 0x0000000002700D12
# <Element 'element' at 0x0000000002700D45
# Что можно сделать через Element.info. Т.е сравнив часть или всю информацию
# В данном случае тег элемента. Вот только для этих элементов он совпадает,
# следовательно будет выбран из них случайный, что в данном случае роли не играет
# но только в данном случае
chosen_el = random.choice(list(c_element_d.keys()))
# Выбираю <Element 'element' at 0x0000000002700D68>
# Вывожу значения какой-нибудь переменной
print(c_element_d[chosen_el].info)
# Save
# Записываю в файл (формат любой), скажем, значение Element.info (т.е тег элемента)
Отредактировано Guljaca (Дек. 5, 2017 13:32:58)
Офлайн
читал диагонально практически, но как то подумалось - а не pickle здесь какой нибудь ли нужен
Офлайн
GuljacaА вы можете привести пример когда это работает? Если нажать кнопку power то никто и пикнуть не успеет.
выключить ПК, включить ПК, развернуть окошечко не всегда работает.
Отредактировано doza_and (Дек. 5, 2017 20:48:03)
Офлайн
GuljacaНу Ren-Py программа с открытым исходным кодом да еще и о боже, написана на пайтоне. Можете посмотреть как там у них все организовано https://github.com/renpy/renpy, чтобы понять что во первых задача далеко не тривиальна и одной строкой не решается. В вторых программа Ren-Py имеет достаточно строгую архитектуру и проэкт там состоит не из чего попало, а из определенных модулей Labels, Screens, Transforms, Definitions и тд… и все это там взаимосвязано .Вот ото обходит все эти элементы и записывает в файл, а при последующем запуске считывает. Никакой магии.
Под сохранением состояния программы, могу привести в качество примера Ren-Py. Внутри можно нагородить сколь угодно сложный код, но при сохранении будет открыто именно то место, на котором ты остановился.
[code python][/code]
Офлайн