Есть ли какая-нибудь поддержка для программы на Python, позволяющей написать понятный человеку файл конфигурации, из которого она может восстановить свое состояние позже?
Обновить:
На основании ответов от 16.03.2013 (или их отсутствия) у меня складывается впечатление, что ничего подобного тому, что я имею в виду, уже не существует. Таким образом, я создам такой механизм для себя, используя модуль configparser, который был предложен Джоном Y и который выглядит полезным.
Оригинал:
Я не говорю о контрольно-пропускном пункте или дампе ядра. Я ищу помощь для решения, которое предоставляет переносимый текстовый файл, который может использоваться экземплярами одной и той же программы, работающей на совершенно разных машинах и ОС.
Меня в первую очередь интересует решение этого вопроса в контексте Python. Несколько лет назад я написал довольно сложную программу на Java, для которой пользовательский интерфейс был легко настраиваемым. Я хотел, чтобы пользователь мог легко сохранить любое настроенное им состояние и сделать его своим значением по умолчанию для следующего использования программы. Кроме того, я хотел, чтобы файл, написанный для этой цели, был удобочитаемым и редактируемым человеком, чтобы изменение самого файла могло быть другим подходом к настройке различных конфигураций для программы. Я решил проблему с помощью довольно грубого решения, которое требовало написания определенного кода для каждого вида соответствующей структуры данных, как для вывода, так и для считывания обратно. Это было хорошее решение проблемы; но это было утомительно реализовать. Недавно я смотрел на программу на Java, написанную кем-то другим, и увидел, что у него было гораздо более элегантное решение проблемы. (Хотя базовая база данных для описания экземпляра его интерфейса была не такой сложной, как моя).
Сейчас я пишу еще одну такую программу, которая будет еще более настраиваемой. Я пишу это на Python. Я только начинающий, когда дело доходит до Python; но я должен сказать, что мне действительно это нравится. Я программировал на очень многих языках, начиная с ассемблера и с Фортрана до Lisp и APL; и я должен сказать, что изучение Python предоставило самый приятный опыт еще. Тем не менее, я продолжаю сталкиваться с очень хорошими расширениями и возможностями, о которых я еще не знал. В большинстве случаев, когда я выполнял поиск, чтобы ответить на какой-то вопрос о Python, я обнаружил, что эта проблема была подробно рассмотрена здесь, в stackru. Таким образом, я надеюсь, что некоторые люди здесь получат представление о том, что я ищу, и, если возможно, укажут мне на некоторые инструменты, которые облегчат процесс.
Мы говорим о файле конфигурации. Его экземпляры могут быть использованы с дистрибутивом для настройки различных возможных конфигураций по умолчанию в первый раз, когда человек использует программу. Сама программа может написать такой файл, который при интерпретации настроит ту же конфигурацию, что и при сохранении состояния. (Обратите внимание, что я не говорю о данных приложения, которыми манипулирует программа. Это можно рассматривать как двоичный файл, который может быть легко сохранен и восстановлен. Другая проблема.) Это не так просто, как сохранение определенных параметров, которые могут быть установлены используя виджеты в графическом интерфейсе, хотя это является его частью. (Я использую Tkinter.) Проблема еще более усложняется тем, что пользователь может свободно создавать дополнительные объекты, каждый со своим окном, и каждый из которых имеет свою собственную конфигурацию для работы.
До сих пор я написал довольно мало кода низкого уровня, не участвуя в создании GUI для всех вещей, которые я хочу настроить. Итак, я задаю вопрос здесь и сейчас, потому что ответ может оказать некоторое влияние на то, как я реализую GUI. Например, могут быть "вещи", которые я могу прикрепить к виджетам, которые говорят: "Этот параметр должен быть сохранен в файле конфигурации для операции сохранения состояния". И тогда это происходит автоматически, когда начинается такое сохранение. Кроме того, автоматически создаются механизмы для интерпретации выходных данных при считывании конфигурации.
Если бы я взял на себя все это самостоятельно, я бы подумал, что программа напишет скрипт на Python, который при интерпретации восстановит состояние. В некоторых случаях могут быть прямые присвоения значений в некоторых модулях. В других случаях могут быть вызовы функций, которые будут настраивать некоторые вещи таким же образом, который применялся во время сохранения. Такой файл все еще может быть интерпретирован в значительной степени и отредактирован в некоторой степени даже людьми, не очень знакомыми с Python.
Во всяком случае, меня интересуют другие идеи о том, как атаковать эту проблему. Я надеюсь, что некоторые инструменты могут существовать для облегчения решения, потому что я не думаю, что то, что я хочу достичь, является необычной вещью, которую нужно хотеть. Я прошу прощения за многословное объяснение; но я думал, что есть ряд направлений, в которых можно неправильно истолковать то, что я ищу, и я хотел быть уверен, что люди поняли, откуда я пришел. Буду признателен за любые указатели.
Добавлено:
Я думаю, что в идеале то, что я ищу, будет работать так: я бы взял на себя ответственность в коде за идентификацию всех тех битов данных, которые составляют информацию о конфигурации в том смысле, который я имею в виду. (Например, у меня может быть функция, которая делает что-то вроде: "Добавьте настройку этого виджета в список параметров, устанавливаемых в виджете, которые необходимо сохранить для конфигурации". Или класс Thingy при создании экземпляра может захотеть сказать "Вот другой экземпляр Thingy в конфигурации, и это его атрибуты, которые можно настраивать.") Затем, имея эти знания в момент запроса операции по сохранению состояния, отдельный инструмент взял бы на себя задачу сброса описания всей информации идентифицированный в файл. Другой отдельный инструмент может быть использован для чтения этого файла и восстановления всех данных. Я готов написать эти инструменты; но я надеюсь, что что-то подобное уже могло быть сделано.
отвечая на Люк -
Я понял, что я переоценил слово "GUI" в своем описании, поэтому я отредактировал описание выше, чтобы исправить это.
Меня не интересует, как выглядят виджеты или как они управляются геометрически. Программа позаботится обо всем этом. ptkgen, похоже, больше заботится о внешнем виде виджетов и их макете, чем о том, что их настройки означают с точки зрения пользователя. Я обеспокоен настройками вещей, которые настраиваются через графический интерфейс, и последствиями действий, предпринятых пользователем, которые влияют на такие вещи, как то, что окна существуют и где они находятся на экране.
Я вижу, что в Python есть поддержка кодирования и декодирования JSON, но, похоже, он находится на низком уровне - таком низком уровне, что он не решает большую проблему. Вам все равно придется совершать определенные вызовы, чтобы выгрузить определенный набор вещей, которые составляют состояние приложения, и знать, что вы загружаете на этом уровне, когда файл читается. На этом уровне я могу изобрести свой собственный формат, который на самом деле было бы проще писать и интерпретировать, чем при использовании JSON.
1 ответ
JSON - это хороший способ хранить данные в виде конфигурационного файла. Это читабельно для человека. Python поддерживает это.
Вас может заинтересовать pytkgen, который позволяет создавать графические интерфейсы Tkinter из файлов определений JSON.
Я не пробовал себя, но это выглядит интересно.
Я надеюсь, что это помогает