Frage Speichern von Anwendungspräferenzen und Daten


Ich versuche, einige Ubuntu-Anwendungen zu erstellen, aber es ist schwer, gute Ressourcen zu finden.

Ich benutze das schnelle Toolkit, würde aber gerne mehr Einblick bekommen. Wie speichert man normalerweise Einstellungen und Einstellungen in Linux / Ubuntu?

Ist es so einfach wie das Erstellen einer XML-Datei und das Speichern der Informationen und das anschließende Lesen dieser Datei beim Anwendungs-Bootstrap?

Wenn mich jemand in eine Richtung weisen kann, würde ich es sehr schätzen.

BEARBEITEN

Das habe ich geschrieben, während ich auf eine Antwort gewartet habe. Wahrscheinlich genau was Präferenzen tun, aber nur codiert. Sie könnten es nützlich finden:

import ConfigParser, os # We need to be able to store and recal settings

#first try to read the config.cfg file
config = ConfigParser.RawConfigParser()
configFile = 'data/config.cfg'

# We need to set some defaults
monState = False
tueState = False
wedState = False
thurState = False
friState = False
satState = False
sunState = False

# Creating the Config file
def createConfigFile(fileName):
    print "CREATING CONFIG" # not needed, but nice for debugging
    config.add_section('Preferences')
    config.set('Preferences', 'mon', False)
    config.set('Preferences', 'tues', False)
    config.set('Preferences', 'wed', False)
    config.set('Preferences', 'thur', False)
    config.set('Preferences', 'fri', False)
    config.set('Preferences', 'sat', False)
    config.set('Preferences', 'sun', False)
    rewriteConfigFile(filename)

# After reading the config file, we can update configs in memory. 
# But this will save it to file for when the application is started up again. 
def rewriteConfigFile(filename):    
    with open(filename, 'wb') as configfile:
        config.write(configfile)

# Reading the config file 
def readConfigFile(fileName):
    print "READING CONFIG"  # not needed, but nice for debugging
    global monState, tueState, wedState, thurState, friState, satState, sunState
    monState = config.getboolean('Preferences', 'mon')
    tueState = config.getboolean('Preferences', 'tues')
    wedState = config.getboolean('Preferences', 'wed')
    thurState = config.getboolean('Preferences', 'thur')
    friState = config.getboolean('Preferences', 'fri')
    satState = config.getboolean('Preferences', 'sat')
    sunState = config.getboolean('Preferences', 'sun')

# If the config does not exist, create it, then read it. Otherwise simply read it
if not config.read(configFile):    
    createConfigFile(configFile)
    readConfigFile(configFile)    
else:
    readConfigFile(configFile)

4
2017-11-07 10:24


Ursprung


Schau dir diese Fragen an: askubuntu.com/questions/59822/...  askubuntu.com/questions/4420/... - mivoligo


Antworten:


Schnelle Anwendungen verwenden die glib-Schemas für Anwendungspräferenzen. Ein Standardschema wird in erstellt data/glib-2.0/schemas. Es ist eine XML-Datei namens net.launchpad.XXXX.gschema.xml wo XXXX ist der Name Ihrer Anwendung.

Hier ist ein Beispieleintrag:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="drawers">
  <schema id="net.launchpad.drawers" path="/net/launchpad/drawers/">
    <key name="maxicons-row" type="i">
      <range min="1" max="15"/>
      <default>5</default>
      <summary>Maximum Icons per Row</summary>
      <description>Minimum value = 1 Max=15</description>
    </key>
  </schema>
</schemalist>

Schlüssel können Ganzzahlen (type = "i"), boolean (type = "b") oder floats (type = "d") sein. Verwenden Sie nur Kleinbuchstaben und - in Schlüsselnamen.

Um auf die Einstellungen zuzugreifen und sie an Widgets zu binden, können Sie sie wie folgt abrufen (aus den schnell generierten PreferencesXXXXWindow.py):

def finish_initializing(self, builder):# pylint: disable=E1002
    """Set up the preferences dialog"""
    super(PreferencesDrawersDialog, self).finish_initializing(builder)

    # Bind each preference widget to gsettings
    self.settings = Gio.Settings("net.launchpad.drawers")
    widget = self.builder.get_object('maxicons_row')
    self.settings.bind("maxicons-row", widget, "value", Gio.SettingsBindFlags.DEFAULT)

Um Werte für Variablen innerhalb eines Programms zu lesen, können Sie Folgendes tun:

from gi.repository import Gio
settings = Gio.Settings("net.launchpad.drawers")
integer=settings.get_int("intsetting")
float = settings.get_double("floatsetting")
bool = settings.get_boolean("booleansetting")

Ich hoffe, das hilft.


2
2017-11-08 19:17



Danke Ian, das ist definitiv eleganter als meine Lösung, mit der ich letztendlich gelandet bin. - Rudi Strydom


Wenn Sie Benutzerdaten speichern, speichern Sie sie normalerweise unter $ HOME / .config / $ YOURAPP / (obwohl der Benutzer dies ändern kann, ist es besser zu verwenden xdg.BaseDirectory.xdg_config_home).

Wenn Sie Python verwenden, empfehle ich die KonfigParser Bibliothek, die das Lesen und Schreiben strukturierter Konfigurationsdateidaten erleichtert.


2
2017-11-08 14:48





Ich habe nicht viel Arbeitserfahrung mit Linux. Aber das ähnliche Problem, mit dem ich bei der Bearbeitung meiner Bewerbung konfrontiert wurde.

In Linux generiert jede Anwendung eine Datei, die alle Einstellungen enthält. Wenn es sich um eine Linux-eigene Anwendung handelt, können Sie einfach nach der Datei im Ordner "/ etc /" suchen.

Bitte geben Sie einen Beispielanwendungsnamen für weitere Details an.

Hoffe, dass dies dir helfen kann, deinen Weg zu finden.


0
2017-11-07 10:44



/ etc / steht für systemweite Einstellungen, nicht für Benutzereinstellungen. - mhall119